我认为这比 Django 更像是一个 python 问题。
但基本上我在 Model A 做:
from myproject.modelb.models import ModelB
在模型 B 上:
from myproject.modela.models import ModelA
结果:
无法导入名称 ModelA
我在做被禁止的事情吗?谢谢
我认为这比 Django 更像是一个 python 问题。
但基本上我在 Model 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')
相互导入通常意味着您设计的模型不正确。
当 A 依赖于 B 时,你不应该让 B 也依赖于 A。
将 B 分成两部分。
B1 - 取决于 A。
B2 - 不依赖于 A。
A 取决于 B1。B1 取决于 B2。去除了圆度。