我认为这比Django更像是一个蟒蛇问题。
但基本上我在模特A做的事情:
from myproject.modelb.models import ModelB
和模特B:
from myproject.modela.models import ModelA
结果:
无法导入名称ModelA
我做了禁止的事吗?感谢
答案 0 :(得分:6)
通过在新命名空间中从上到下执行Python模块来导入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')
答案 1 :(得分:2)
相互导入通常意味着您错误地设计了模型。
当A取决于B时,你也不应该依赖A来使用B.
将B分为两部分。
B1 - 取决于A。
B2 - 不依赖于A.
A取决于B1。 B1取决于B2。圆形度已删除。