首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImportError:模型A参考模型B模型B模型参考模型A

ImportError:模型A参考模型B模型B模型参考模型A
EN

Stack Overflow用户
提问于 2010-01-22 20:38:46
回答 2查看 436关注 0票数 2

我认为这更像是一个巨蟒问题,而不是Django。

但基本上我在模特A做的:

代码语言:javascript
复制
from myproject.modelb.models import ModelB

在示范B:

代码语言:javascript
复制
from myproject.modela.models import ModelA

结果:

不能导入名称ModelA

我在做什么被禁止的事吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-22 20:48:52

Python模块是通过在新的命名空间中自上而下地执行它来导入的。当模块A导入模块B时,A.py的计算被暂停,直到加载模块B。当模块B导入模块A时,它得到模块A的部分初始化命名空间--在您的示例中,它缺少ModelA类,因为myproject.modelb.models的导入发生在该类定义之前。

在Django中,您可以通过按名称而不是按类对象引用模型来修复这个问题。所以,而不是说

代码语言:javascript
复制
from myproject.modela.models import ModelA
class ModelB:
    a = models.ForeignKey(ModelA)

您将使用(没有导入):

代码语言:javascript
复制
class ModelB:
    a = models.ForeignKey('ModelA')
票数 6
EN

Stack Overflow用户

发布于 2010-01-22 20:53:21

相互进口通常意味着你的模型设计不正确。

当A依赖于B时,就不应该有B也依赖于A。

把B分成两部分。

B1 -依赖于A。

B2 -不依赖于A。

A依赖于B1。B1依赖于B2。圆度移除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2120332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档