Django 1.7抛出django.core.exceptions.AppRegistryNotReady:模型尚未加载

时间:2014-08-27 22:24:58

标签: python django

这是我的Windows系统上的回溯。

Traceback (most recent call last):
  File "D:\AMD\workspace\steelrumors\manage.py", line 9, in <module>
    django.setup()
  File "D:\AMD\Django\django-django-4c85a0d\django\__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\registration\models.py", line 15, in <module>
    User = get_user_model()
  File "D:\AMD\Django\django-django-4c85a0d\django\contrib\auth\__init__.py", line 135, in get_user_model
    return django_apps.get_model(settings.AUTH_USER_MODEL)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 199, in get_model
    self.check_models_ready()
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

我的manage.py看起来像这样:

import os
import sys
import django

if __name__ == "__main__":

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "steelrumors.settings")
    django.setup()
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

当我尝试在Django 1.7中使用registration应用时,我收到此错误

13 个答案:

答案 0 :(得分:230)

运行这些命令解决了我的问题(归功于this answer):

import django
django.setup()

但是我不确定为什么需要这个。评论将不胜感激。

答案 1 :(得分:56)

这就是为我们和these folks解决了这个问题:

我们的项目从Django 1.4开始,我们进入1.5然后到1.7。我们的wsgi.py看起来像这样:

import os

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

当我更新到1.7样式的WSGI处理程序时:

import os

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

现在一切正常。

答案 2 :(得分:55)

问题出在您的注册应用中。似乎django-registration在get_user_module()中在模块级别调用models.py(当模型仍被应用程序注册过程加载时)。这将不再有效:

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User    

我将此模型文件更改为仅在方法内调用get_user_model()(而不是在模块级别),并且在FK中使用类似的内容:

user = ForeignKey(settings.AUTH_USER_MODEL)

顺便说一句,在django.setup()文件中不需要拨打manage.pyexecute_from_command_line会为您调用{{1}}。 (source

答案 3 :(得分:19)

刚遇到同样的问题。问题是因为django-registration与django 1.7用户模型不兼容。

一个简单的解决方法是在已安装的django-registration模块::

中更改这些代码行
try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User  

要::

from django.conf import settings
try:
    from django.contrib.auth import get_user_model
    User = settings.AUTH_USER_MODEL
except ImportError:
    from django.contrib.auth.models import User 

我在.venv/local/lib/python2.7/site-packages/registration/models.py(virtualenv)

答案 4 :(得分:13)

这适用于Django 1.9。要执行的Python脚本位于Django项目的根目录中。

    import django 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_NAME.settings")
    django.setup()
    from APP_NAME.models import *

将PROJECT_NAME和APP_NAME设置为您的

答案 5 :(得分:5)

另一个选项是您在INSTALLED_APPS中有重复的条目。这为我测试过的两个不同的应用程序引发了这个错误。显然它不是Django检查的东西,但是那个傻到可以将同一个应用程序放在列表中两次。我,那是谁。

答案 6 :(得分:2)

在运行manage.py之前,您是否需要输入Python虚拟环境?

我自己遇到了这个错误,这就是问题所在。

答案 7 :(得分:2)

当我使用djangocms并添加了一个插件(在我的情况下:djangocms-cascade)时,我遇到了这个问题。当然我必须将插件添加到INSTALLED_APPS。但顺序在这里很重要。

在“cms”之前放置“cmsplugin_cascade” 解决了这个问题。

答案 8 :(得分:2)

安装django-registration-redux == 1.1而不是django-registration,如果你使用django 1.7

答案 9 :(得分:0)

./manage.py migrate

这解决了我的问题

答案 10 :(得分:0)

如果在模型之间创建ForeignKey关系的上下文中遇到此错误。下面的示例引发AppRegistryNotReady: Models aren't loaded yet错误。

from my_app.models import Workspace

workspace = models.ForeignKey(Workspace)

然后请尝试将模型作为字符串引用。

from my_app.models import Workspace

# One of these two lines might fix the problem.
workspace = models.ForeignKey('Workspace')
workspace = models.ForeignKey('my_app.Workspace')

答案 11 :(得分:-1)

您的manage.py是&#34;错误&#34 ;;我不知道你从哪里得到它,但那不是1.7 manage.py - 你是否使用了一些时髦的预发布版本?

将您的manage.py重置为常规,如下所示,以及应该工作的事情:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

答案 12 :(得分:-1)

我的问题来自 init .py。我制作了一个应用,想要做到这一点:

from MY_APP import myfunc

而不是:

from MY_APP.views import myfunc

当我回滚对这些部分的更改时。一切都很好。