我認爲這是一個比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