无法在__init__.py Django 1.9.4中导入模型

Rak*_*abu 5 django django-models

我的目录结构是。

Mypack:
  --> __init__.py
  --> admin.py
  --> apps.py
  --> foo.py
  --> models.py
Run Code Online (Sandbox Code Playgroud)

在apps.py中,我有AppConfig。我在foo.py中有一些方法,该方法使用从models.py导入的模型。然后将所有方法导入init .py。

from foo import *
Run Code Online (Sandbox Code Playgroud)

我使这个应用程序可以通过pip安装。当我将其安装在其他Django应用中并尝试运行python manage.py check时。它给出以下错误。

django.core.exceptions.AppRegistryNotReady:应用尚未加载。

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

knb*_*nbk 4

来自1.9 发行说明(重点是我的):

\n\n
\n
    \n
  • 所有模型都需要在已安装的应用程序内定义或声明显式的 app_label。此外,在加载应用程序之前\xe2\x80\x99 不可能导入它们。特别是,\xe2\x80\x99 无法在应用程序的根包内导入模型。
  • \n
\n
\n\n

您正在(间接)将模型导入到应用程序的根包中,Mypack/__init__.py. 如果您仍然想将函数导入到foo.py根包中,则需要确保在首次导入模块时不会导入模型。一种选择是使用内联导入:

\n\n
def foo():\n    from .models import MyModel\n    MyModel.objects.do_something()\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果在根包中导入函数不是硬性要求(例如为了向后兼容),我个人会停止导入它们__init__.py并更改其他导入以使用Mypack.foo.

\n