我认为这是一个比Django更蟒蛇的问题。ImportError:模型A参考模型B,模型B参考模型A
但基本上我在A型做:
from myproject.modelb.models import ModelB
,并在B型:
from myproject.modela.models import ModelA
结果:
cannot import name ModelA
我是不是被禁止?谢谢
我认为这是一个比Django更蟒蛇的问题。ImportError:模型A参考模型B,模型B参考模型A
但基本上我在A型做:
from myproject.modelb.models import ModelB
,并在B型:
from myproject.modela.models import ModelA
结果:
cannot import name 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')
非常感谢托马斯!拯救了我的一天! 顺便说一下,我认为'a = models.ForeignKey('ModelA')'的语法是'models.ForeignKey('module.model')',这就是它对我的工作原理! – Clash 2010-01-22 20:55:12
相互进口通常意味着你设计你的模型不正确。
当A依赖于B,你不应该有B还取决于A.
歇B插入两个部分。
B1 - 取决于A.
B2 - 不依赖于A.
A依赖于B1。 B1取决于B2。循环删除。
dupe http://stackoverflow.com/questions/744373/python-cyclic-imports – 2010-01-22 20:41:38
我找不到我的问题的答案,我可以得到一些额外的帮助吗?不是我做得可能吗? – Clash 2010-01-22 20:48:23