ImportError:模型A引用模型B,模型B引用模型A.

Cla*_*ash 2 python django circular-dependency

我认为这比Django更像是一个蟒蛇问题.

但基本上我在模特A做:

from myproject.modelb.models import ModelB
Run Code Online (Sandbox Code Playgroud)

在模型B:

from myproject.modela.models import ModelA
Run Code Online (Sandbox Code Playgroud)

结果:

无法导入名称ModelA

我做了一些禁止的事吗?谢谢

Tho*_*ers 6

通过在新命名空间中从上到下执行Python模块来导入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)
Run Code Online (Sandbox Code Playgroud)

你会使用(没有导入):

class ModelB:
    a = models.ForeignKey('ModelA')
Run Code Online (Sandbox Code Playgroud)