django中的应用程序之间的模型导入失败(循环导入?)

时间:2011-08-04 19:31:40

标签: python django import nameerror

我在当前的django项目中在我的应用程序之间导入模型时遇到问题。尝试运行开发服务器或同步数据库时,收到错误:

File "/path/to/Project/../Project/app1/models.py", line 3, in <module>
class SomeModel(Thing):
NameError: name 'Thing' is not defined

事情在 Project / main / models.py 中定义,我通过以下方式导入 Project / app1 / models.py

from project.main.models import Thing

我知道这种事情可能是python阻止循环导入的结果。

目前我有三个django应用程序:main,app1,app2

每个应用的导入都是这样的:

主:

from project.app1.models import AnotherThing

APP1:

from project.main.models import Thing

APP2:

from project.main.models import Thing
from project.app1 import Something

我怀疑从app1导入模型到app2导致了问题,因为这两个应用都从main导入模型,而main又从app1导入模型等。

如果是这种情况 - 我可以使用哪些其他方法来实现与这些导入相同的效果? 是否有一种更可接受的组织方式,以便我不会遇到这种情况?

1 个答案:

答案 0 :(得分:2)

如果要对这些模型进行子类化,则需要删除循环依赖项。将常见的东西重构为另一个模块,并将这两个导入而不是相互导入。如果模型仅用作外键,则可以使用字符串而不是对象来推迟导入(例如ForeignKey('app.Model') - 有关详细信息,请参阅文档。)