【问题标题】:Django - Circular import with multiple filesDjango - 带有多个文件的循环导入
【发布时间】:2020-07-23 04:04:27
【问题描述】:

我在一个包中有 3 个 python 文件,我正在尝试将一个文件中的一个类导入到另一个 2 个文件中。但我得到错误。

models
   __init__.py
   a.py
   b.py
   c.py

a.py

class ATestOne()
    pass

class ATestTwo()
    pass

class ATestThree()
    pass

b.py

from app.models.a import ATestOne, ATestTwo
from app.models.c import CTestOne

class BTestOne()
    field1 = models.ForeignKey(ATestOne)

class BTestTwo()
    field1 = models.ForeignKey(CTestOne)

c.py

from app.models.a import ATestOne, ATestThree
from app.models.b import BTestOne
class CTestOne()
    field1 = models.ForeignKey(ATestOne)

 class CTestTwo()
        field1 = models.ForeignKey(BTestOne)

返回下面提到的错误 ImportError: 无法导入名称“ATestOne”

请提供解决此问题的建议。提前致谢。

【问题讨论】:

  • 文件b.pyc.py之间的循环导入是明确的。将导入移动到相应的类下。那应该可以。

标签: python django model circular-dependency


【解决方案1】:

您可以通过使用字符串引用这些模型来避免循环导入问题,例如

class BTestOne()
    field1 = models.ForeignKey('app.ATestOne')

class BTestTwo()
    field1 = models.ForeignKey('app.CTestOne')

(如果我猜对了,app 是您的模型所在的应用程序的名称)

【讨论】:

  • 我也试过了,我也得到了错误字段 app.TrnPlag.tq_question 声明时使用了对 'api.tqtrnquestions' 的惰性引用,但应用程序 'app' 不提供模型 'tqtrnquestions'。
  • 您的应用的实际名称是什么?它是如何在设置中的INSTALLED_APPS 中定义的?您是如何在 ForeignKey 定义中准确声明它的?
  • 字段定义了与模型“app.TqTrnQuestions”的关系,该模型要么未安装,要么是抽象的。字段 app.TrnPlag.tq_question 是通过对“app.tqtrnquestions”的惰性引用声明的,但应用“app”不提供模型“tqtrnquestions”。
  • Tbh 我迷路了,请用所有相关信息和真实姓名更新您的原始问题,因为您发布的真实姓名错误。另外,tqtrnquestions 是模特吗?为什么是小写字母? - 真的很混乱。
猜你喜欢
  • 2022-10-09
  • 2021-01-22
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多