python - django 中的应用程序之间的模型导入失败(循环导入?)

标签 python django import nameerror

我在当前 django 项目中的应用程序之间导入模型时遇到问题。当尝试运行开发服务器或同步数据库时,我收到错误:

File "/path/to/Project/../Project/app1/models.py", line 3, in <module>
class SomeModel(Thing):
NameError: name 'Thing' is not defined

事物在Project/main/models.py中定义,我通过以下方式导入Project/app1/models.py:

from project.main.models import Thing

我知道这种情况可能是 python 阻止循环导入的结果。

目前我有三个 django 应用程序:main、app1、app2

每个应用程序的导入如下所示:

主要:

from project.app1.models import AnotherThing

应用程序1:

from project.main.models import Thing

应用程序2:

from project.main.models import Thing
from project.app1 import Something

我怀疑将模型从 app1 导入到 app2 会导致问题,因为这两个应用程序都从 main 导入模型,而 main 又从 app1 导入模型,等等。

如果是这种情况 - 我还可以使用哪些其他方法来达到与这些导入相同的效果? 有没有一种更容易接受的组织方式,这样我就不会遇到这种情况?

最佳答案

如果您想对这些模型进行子类化,则需要删除循环依赖。将常见的内容重构到另一个模块中,并使这两个模块相互导入。如果模型仅用作外键,则可以使用字符串而不是对象来推迟导入(例如 ForeignKey('app.Model') - 有关详细信息,请参阅文档)。

关于python - django 中的应用程序之间的模型导入失败(循环导入?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947476/

相关文章:

javascript - 为什么 Django admin "Today"和 "Now"按钮不显示在 Safari 中?

python - NaN 值与分隔符相同 - 如何导入?

python - 为什么我的代码不打印 `os.path`

python - 第二次 python 执行失败

Python:如何在嵌套循环中用下一个替换 tqdm 进度条?

python - 使用 SymPy 的求解函数反汇编 Python 程序(幕后发生了什么?)

用于扩展导入的 Python 预解释器

python - apache - wsgi - python - 基本示例

Django Photologue 教程

django - 如何在重写 save_model 方法时防止出现 "Changed successfully"消息