我认为这比Django更像是一个python问题。
但基本上我是在做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')

10-07 12:35