1

我在当前 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

应用程序1:

from project.main.models import Thing

应用程序2:

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

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

如果是这种情况 - 我可以使用哪些其他方法来达到与这些导入相同的效果?有没有更被接受的组织事情的方式,这样我就不会遇到这种情况?

4

1 回答 1

3

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

于 2011-08-04T19:34:11.580 回答