Django 1.7 抛出 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet

8 浏览
0 Comments

Django 1.7 抛出 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet

这是我在Windows系统上的跟踪回溯。

我的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中使用注册应用程序时,我遇到了这个错误。

0
0 Comments

在更新Django版本时,出现了"Django 1.7 throws django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet"的错误。解决方法如下:

在Django 1.4版本中,wsgi.py文件的代码如下:

import os
from django.core.handlers.wsgi import WSGIHandler
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

在更新到Django 1.7版本时,需要修改wsgi.py文件的代码如下:

import os
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

这样修改后,问题得到解决。需要注意的是,自动生成的wsgi.py文件中从未包含import sys的语句。无论是在1.4版本、1.5版本还是1.7版本中,都没有这个语句。如果wsgi.py文件中包含了import sys语句,那么是由某人手动添加的,而不是由django-admin startproject自动生成的。

这个错误的解决方法得到了Stack Overflow上的一些用户的验证和采纳。

0
0 Comments

问题的出现原因是在注册应用程序中。django-registration在models.py中的模块级别调用了get_user_module(),而在该过程中模型仍在被应用程序注册过程中加载,这将不再起作用。

解决方法是将models文件更改为仅在方法中调用get_user_model()(而不是在模块级别),并在FKs中使用类似以下的内容:

user = ForeignKey(settings.AUTH_USER_MODEL)

另外,你的manage.py文件中不需要调用django.setup(),因为它已经在execute_from_command_line中为你调用了。将其放在if __name__ == '__main__':中对我来说是有效的,但我不知道这是否是一个好的解决方案。

不确定你是如何做的,但那不应该起作用,因为django正在导入该模块。可能你通过根本不导入User模型来避免循环依赖。

我的意思是将这些行放在名称检查中。这可能会跳过执行。我还没有进行足够的测试。

0
0 Comments

在Django 1.7中,出现了一个错误:django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet。下面的内容解释了这个问题出现的原因以及解决方法。

根据stackoverflow上的一个答案,运行以下命令可以解决这个问题:

import django
django.setup()

然而,我不确定为什么需要这样做。希望有人能提供解释。

根据django 1.7发布说明中的信息,Django有了一种新的加载已安装应用程序的方式。如果你在Python脚本中加载Django(比如我在自定义单元测试中),在继续之前需要进行一些初始化工作,而调用setup()就是这样做的方法。除此之外,对Django团队表示赞赏,升级从1.6.2到1.7.1似乎只需要一个小时的实际工作。

那么在哪里运行上述命令?你应该在出现错误的上下文中运行它。

这个答案有足够的赞同票来被标记为正确答案。

这也解决了我在迁移到1.7版本时遇到的问题,问题发生在一个命令行更新脚本中。

如果你正在构建一个独立的应用程序,你需要调用django.setup(),参考文档:docs.djangoproject.com/en/1.8/topics/settings/… 其他的解决方法(如get_wsgi_application())在后台调用了django.setup()或类似的方法。

我正在从1.4版本升级,这个解决方法不起作用,而接受的答案起作用。提供给其他人参考。

0