我认为这比Django更像是一个python问题。
但基本上我是在做A型的:
from myproject.modelb.models import ModelB
B型:
from myproject.modela.models import ModelA
结果:
无法导入名称ModelA
我在做什么被禁止的事吗?谢谢
最佳答案
Python模块是通过在新的名称空间中自上而下执行来导入的。当模块A导入模块B时,A.py的计算将暂停,直到加载模块B。然后,当模块B导入模块A时,它获取模块A的部分初始化命名空间——在您的例子中,它缺少ModelA
类,因为myproject.modelb.models
的导入发生在该类的定义之前。
在Django中,可以通过按名称而不是按类对象引用模型来解决此问题。所以,不要说
from myproject.modela.models import ModelA
class ModelB:
a = models.ForeignKey(ModelA)
您将使用(不带导入):
class ModelB:
a = models.ForeignKey('ModelA')