我认为这更像是一个巨蟒问题,而不是Django。
但基本上我在模特A做的:
from myproject.modelb.models import ModelB在示范B:
from myproject.modela.models import ModelA结果:
不能导入名称ModelA
我在做什么被禁止的事吗?谢谢
发布于 2010-01-22 20:48:52
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')发布于 2010-01-22 20:53:21
相互进口通常意味着你的模型设计不正确。
当A依赖于B时,就不应该有B也依赖于A。
把B分成两部分。
B1 -依赖于A。
B2 -不依赖于A。
A依赖于B1。B1依赖于B2。圆度移除。
https://stackoverflow.com/questions/2120332
复制相似问题