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


166

这是我的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中使用注册应用程序时收到此错误


1
您有一个目录django-django-4c85a0d4c85a0d碰巧是(不稳定的)Django提交哈希。我不相信您实际上使用的是Django 1.7(参见我的回答)
Kristian Glass

您是否解决了您的问题?
Nick Spacek 2014年

这也可能与venv。重新创建venv目录已为我修复。```MV VENV venv_old的virtualenv VENV源./venv/bin/activate PIP安装-r requirements.txt```
托马斯- BeeDesk

1
当我在Mac上的settings.py中添加LOGGING时,我也会遇到类似的错误,这是因为我在/var/log/xx/debug.log上创建了一个日志文件,并且没有权限,所以我使用sudo来运行服务器,一切都很好。可能会帮助一些同性恋者
gwiwi

我在运行时看到此错误docker-compose exec ...。问题是我没有将必需的环境变量传递给命令docker-compose exec
Matthew Hegarty,

Answers:


59

这就是为我们和这些人解决的问题:

我们的项目从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()

现在一切正常。


1
我不同意@wim的编辑,不是因为我认为我们应该保留不必要的导入,而是因为我在举一个示例,说明自动生成的wsgi.py之前的样子以及复制后的样子与1.7自动生成的wsgi.py的区别。
尼克·史派克

1
自动生成的wsgi.py文件中永远不会包含import sys。不在1.4中,不在1.5中,也不在1.7中。如果您在其中,它是由某人手动添加的-django-admin startproject未添加。
2013年

很高兴知道,我的错误(和记忆力差)。自从我这样做以来已经有一段时间了,但是我可以肯定的是,当时我正试图记录内置行为。
尼克·史派克

236

运行这些命令解决了我的问题(此答案的积分):

import django
django.setup()

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


12
抱歉,请假装我在django 1.7发行说明中所读到的有关重大更改的内容。 docs.djangoproject.com/en/dev/releases/1.7/…。基本上,Django有一种加载已安装应用程序的新方法。如果您是从Python脚本加载Django(就像我在自定义单元测试中一样),则需要先进行一些初始化,然后再调用setup()进行操作。除此之外,对团队而言,我的1.6.2到1.7.1的升级似乎是值得一小时的实际工作。
JL Peyret 2014年

12
在哪里运行上述命令?我将其添加到.py文件中还是什么?
KhoPhi 2014年

1
您应该在发生错误的相同上下文中运行该
Nimo 2014年

3
这有足够的投票值得被标记为正确的答案
acid_crucifix

这也解决了我在升级到1.7时遇到的命令行更新脚本中遇到的问题。
杰森冠军

58

问题出在您的注册应用中。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.py文件中不需要调用,而是在中为您调用execute_from_command_line。(来源


把它放进去if __name__ == '__main__':对我有用,但我不知道这是否是一个好的解决方案。
Umair A. 2014年

@Neutralizer不确定您如何执行此操作,但由于django正在导入此模块,因此该操作不起作用。您可能根本不导入User模型,从而避免了循环延迟。
gonz

1
我的意思是将这些行放在名称检查中。它可能会跳过执行。我没有做足够的测试。
Umair A. 2014年

18

刚遇到同样的问题。问题是因为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)


7
您可以改用django-registration-redux。它已更新并维护了fork:github.com/macropin/django-registration
TJL

1
django-registration-redux为我解决了该问题(我与OP拥有完全相同的堆栈)
Pierre de LESPINAY 2015年

1
万一有人在Django 1.8上为此苦苦挣扎,它也适用于Django 1.8。
Andrew Schuster 2015年

14

这对我适用于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设置为您的


1
这个对我有用。但是我不知道为什么要运行此代码,因为我们已经在wsgi文件中提到了这些代码。
代码先生

5

另一个选择是您在INSTALLED_APPS中有一个重复的条目。这引发了我测试的两个不同应用程序的错误。显然,这不是Django所要检查的事情,但是谁又傻又足以将同一应用程序两次放入列表中。我,那是谁。


2

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

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


2

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

将“ cmsplugin_cascade”放置 “ cms” 之前即可解决此问题。


1
顺序确实很重要:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev

2

如果使用django 1.7,请安装django-registration-redux == 1.1代替django-registration


0

./manage.py migrate

这解决了我的问题


这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。- 评论
乔治·Z

@GeorgeZ。它看起来像是试图回答问题的尝试,并且显然在海报发问时已解决了该问题-即使您认为这是错误的或应予以详细阐述,也不应将真正回答该问题的尝试从评论中删除
SomePerformance

-1

manage.py的“错误”;我不知道您从哪里得到它,但是那不是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)

我有一个类似的manage.py,但仍然有这个问题
rmosolgo 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.