小编fra*_*ous的帖子

绝对导入模块在同一个包中

我将导入问题简化为这个简单的基本情况.说我有一个Python包:

mypkg/
   __init__.py
   a.py
   b.py
Run Code Online (Sandbox Code Playgroud)

a.py包含:

def echo(msg):
    return msg
Run Code Online (Sandbox Code Playgroud)

b.py包含:

from mypkg import a       # possibility 1, doesn't work
#import a                 # possibility 2, works
#from mypkg.a import echo  # import also fails

print(a.echo())
Run Code Online (Sandbox Code Playgroud)

在Python 2.7.6和Python 3.3.5上运行python b.py生成ImportError: No module named mypkg.我也尝试过添加from __future__ import absolute_import两种情况,同样的问题.

预期:

我希望可能性1工作得很好.

为什么我要这样做:

可能性2不太理想.假设标准库可以引入一个名为的包a(在这种情况下不太可能,但你明白了).虽然Python 2首先搜索当前包,但Python 3+包含绝对导入更改,因此首先检查标准库.不管我的理由是什么,可能性1应该起作用,不是吗?我可以发誓我以前做过几千次.

注意:如果您编写外部脚本mypkg,from mypkg import a则无问题.

我的问题类似于python - 同一目录中模块的绝对导入,但作者暗示我所拥有的应该是有效的.

python import python-2.7 python-3.x

6
推荐指数
1
解决办法
5924
查看次数

在 Django 中更改表名

我读过可以使用Meta Options自定义 Django 中的表名。我想知道如何使用 db_table 选项继续使用应用程序名称但稍微修改模型名称而不对应用程序名称进行硬编码。

例如,在 Django 教程中,应用名称是“polls”,模型名称是“poll”。假设我希望该表被称为“polls_mypoll”而不是“polls_poll”。这是我尝试过的,但无法访问外部类(未定义轮询)

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    class Meta:
        db_table = "%s_%s" % (Poll._meta.app_label, "mypoll")
Run Code Online (Sandbox Code Playgroud)

同样,如果我想明确地定义 db_table 只是默认的 polls_poll 怎么办?我知道我可以完全不使用 Meta 类并使用默认名称,但是如果我想明确说明它怎么办?

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    class Meta:
        db_table = "%s_%s" % (Poll._meta.app_label, Poll._meta.model_name)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 Poll 没有在 Meta 中定义。

python django

5
推荐指数
1
解决办法
4935
查看次数

Django过滤与用户组具有一对一关系的项目

在 Django 中,如果我有一个模型,例如一个与包含用户的(Django Auth)组相关的 OneToOne 建筑物,我如何找到用户所属的所有建筑物(也许这些是用户工作的所有建筑物)?Building 与 Group 是一对一的,因此 building 有一个名为“group”的组外键字段。

我试过了

Building.objects.filter(group__contains=user)
Building.objects.filter(group_user_set__contains=user)
Run Code Online (Sandbox Code Playgroud)

当应该有比赛时,我却没有得到比赛。

sql django

3
推荐指数
2
解决办法
4618
查看次数

标签 统计

django ×2

python ×2

import ×1

python-2.7 ×1

python-3.x ×1

sql ×1