【问题标题】:Unable to import models in __init__.py django 1.9.4无法在 __init__.py django 1.9.4 中导入模型
【发布时间】:2016-07-13 23:40:08
【问题描述】:

我的目录结构是。

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

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

【问题讨论】:

  • 我用“ from models import *”导入了我的模型
  • 显示你的 apps.py, __init__.py / 文件你导入 foo 的地方
  • init.py: default_app_config = 'Mypack.apps.myConfig' from foo import *
  • apps.py: from django.apps import AppConfig class myConfig(AppConfig): name = 'mypack' verbose_name = "django mypack"
  • 在应用程序准备好之前,您无法导入模型。为什么要在__init__.py 文件中导入它?你想直接从包中访问 foo 方法吗?

标签: django django-models


【解决方案1】:

来自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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2015-07-30
    相关资源
    最近更新 更多