Django 1.7 抛出 django.core.exceptions.AppRegistryNotReady:模型尚未加载
- 2025-02-27 09:07:00
- admin 原创
- 51
问题描述:
这是我的 Windows 系统上的回溯。
Traceback (most recent call last):
File "D:AMDworkspacesteelrumorsmanage.py", line 9, in <module>
django.setup()
File "D:AMDDjangodjango-django-4c85a0ddjango__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "D:AMDDjangodjango-django-4c85a0ddjangoapps
egistry.py", line 108, in populate
app_config.import_models(all_models)
File "D:AMDDjangodjango-django-4c85a0ddjangoappsconfig.py", line 197, in import_models
self.models_module = import_module(models_module_name)
File "C:Python27libimportlib__init__.py", line 37, in import_module
__import__(name)
File "C:Python27libsite-packages
egistrationmodels.py", line 15, in <module>
User = get_user_model()
File "D:AMDDjangodjango-django-4c85a0ddjangocontribauth__init__.py", line 135, in get_user_model
return django_apps.get_model(settings.AUTH_USER_MODEL)
File "D:AMDDjangodjango-django-4c85a0ddjangoapps
egistry.py", line 199, in get_model
self.check_models_ready()
File "D:AMDDjangodjango-django-4c85a0ddjangoapps
egistry.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:
运行这些命令解决了我的问题(归功于这个答案):
import django
django.setup()
但是我不确定我为什么需要这个。欢迎提出评论。
解决方案 2:
这就是为我们和这些人解决问题的方法:
我们的项目从 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()
现在一切正常。
解决方案 3:
问题出在您的注册应用程序中。似乎 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
。(来源)
解决方案 4:
刚刚遇到了同样的问题。该问题是由于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)
解决方案 5:
对于 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 设置为你的
解决方案 6:
另一种可能是 INSTALLED_APPS 中存在重复条目。我测试的两个不同应用都出现了此错误。显然这不是 Django 检查的内容,但是谁会愚蠢到把同一个应用放入列表中两次呢?就是我。
解决方案 7:
在运行 manage.py 之前,您是否需要进入 Python 虚拟环境?
我自己也遇到过这个错误,这就是问题所在。
解决方案 8:
我非常确定这还不算晚。如果您使用文件Django 4
进行.env
设置,则在 settings.py 中定义一个值但文件中不存在该值时,您将遇到此错误.env
:
参见以下场景:
我的 PLAID_KEYsettings.py
如下
PLAID_KEY=env('PLAID_KEY')
但是,PLAID_KEY 在我的 .env 文件中不存在,添加它可以解决问题。
解决方案 9:
当我使用 djangocms 并添加插件(在我的情况下为:djangocms-cascade)时,我遇到了这个问题。当然,我必须将插件添加到 INSTALLED_APPS。但这里的顺序很重要。
将“cmsplugin_cascade”放置在“cms”之前解决了该问题。
解决方案 10:
如果你使用 django 1.7,请安装 django-registration-redux==1.1 而不是 django-registration
解决方案 11:
./manage.py migrate
这解决了我的问题
解决方案 12:
如果在模型之间创建 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')
解决方案 13:
你的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)
解决方案 14:
我的问题来自init.py。我制作了一个应用程序并想执行以下操作:
from MY_APP import myfunc
而不是:
from MY_APP.views import myfunc
当我回滚对这些部分的更改时,一切都正常。
扫码咨询,免费领取项目管理大礼包!