所以我在同一个项目中运行了 2 个应用程序。
我的文件结构如下:
/project_codebase
/project
__init.py
settings.py
urls.py
wsgi.py
...
/app1
...
/app2
...
manage.py
所以,出于某种奇怪的原因,我的基本目录有一个不同的名称(也就是说,它以代码库结尾)。希望这不是问题。
在我的 settings.py 中,我有这个:
INSTALLED_APPS = [
...
'app1',
'app2',
]
好的,所以在我的 models.py(来自 app2) 中,我可以使用 from app1.models import *
轻松地从 app1 导入模型,但是,当我在我的 models.py(来自 app1) 中使用 from app2.models import *
时,我得到一个 ImportError。
有什么解决办法吗?
原文由 darkhorse 发布,翻译遵循 CC BY-SA 4.0 许可协议
这可能是由于 循环导入 问题。为避免这种情况,您应该 动态加载模型:
对于 最新版本的 django (1.7+) 使用 应用程序注册表:
对于 早期的 django 版本(<1.7) :
注1: 如果要定义 ForeignKey关系, 不需要单独的import语句。 Django 有没有介绍 过这个:
如果
app1
是一个已安装的app,你应该定义ForeignKey关系如下:Note 2 : The
get_model
only works ifapp1
is an installed app andMyModel1
is the model you want to import fromapp1
.注意 3: 尽量避免通配符导入(
from ... import *
),因为 这是不好的做法。