我的目录结构是。
Mypack:
--> __init__.py
--> admin.py
--> apps.py
--> foo.py
--> models.py
在apps.py中,我有AppConfig。我在foo.py中有一些方法,它们使用从models.py导入的模型。我在 init .py。
中导入了所有方法from foo import *
我使用pip安装此应用程序。当我在其他django应用程序中安装它并尝试运行python manage.py检查。它给出了以下错误。
django.core.exceptions.AppRegistryNotReady:尚未加载应用。
请建议我,如何解决这个问题?
答案 0 :(得分:4)
来自1.9 release notes(强调我的):
- 所有型号都需要在已安装的应用程序中定义或 声明一个明确的app_label。此外,它是不可能的 在加载应用程序之前导入它们。 特别是,它 无法在根包中导入模型 应用强>
您(间接)将模型导入应用的根包Mypack/__init__.py
。如果您仍想将foo.py
中的函数导入到根包中,则需要确保在首次导入模块时不导入模型。一种选择是使用内联导入:
def foo():
from .models import MyModel
MyModel.objects.do_something()
如果导入根软件包中的功能并不是一项硬性要求(例如,为了向后兼容),我个人会在__init__.py
中停止导入它们并更改其他导入以使用Mypack.foo
。