无法导入__init__.py中的模型django 1.9.4

时间:2016-03-26 08:16:09

标签: django django-models

我的目录结构是。

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:尚未加载应用。

请建议我,如何解决这个问题?

1 个答案:

答案 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