Django中应用间模型导入失败(循环导入?)
我在当前的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中定义了一个名为Thing的模型,我通过以下方式在Project/app1/models.py中导入它:
from project.main.models import Thing
我知道,这种情况可能是因为Python防止循环导入导致的。
目前我有三个Django应用:main、app1和app2。
每个应用的导入方式如下:
main:
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 个回答
3
如果你想要对这些模型进行子类化,你需要解决循环依赖的问题。可以把一些共同的内容提取到另一个模块中,然后让这两个模块去导入这个新的模块,而不是互相导入。如果某个模型只是用作外键,你可以用字符串代替对象来延迟导入(比如 ForeignKey('app.Model')
— 具体细节可以查看文档)。