2

我认为这比 Django 更像是一个 python 问题。

但基本上我在 Model A 做:

from myproject.modelb.models import ModelB

在模型 B 上:

from myproject.modela.models import ModelA

结果:

无法导入名称 ModelA

我在做被禁止的事情吗?谢谢

4

2 回答 2

6

通过在新命名空间中从上到下执行 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-22T20:48:52.363 回答
2

相互导入通常意味着您设计的模型不正确。

当 A 依赖于 B 时,你不应该让 B 也依赖于 A。

将 B 分成两部分。

B1 - 取决于 A。

B2 - 不依赖于 A。

A 取决于 B1。B1 取决于 B2。去除了圆度。

于 2010-01-22T20:53:21.320 回答