Django 1.7 throws django.core.exceptions.AppRegistryNotReady: модели еще не загружены
Это обратная связь в моей системе 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
14 ответов
Вот что решило это для нас и этих людей:
Наш проект начался с 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()
Когда я обновил обработчик WSGI в стиле 1.7:
import os
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()
Все работает сейчас.
Выполнение этих команд решило мою проблему (кредит на этот ответ):
import django
django.setup()
Однако я не уверен, зачем мне это нужно. Комментарии будут оценены.
Проблема в вашем регистрационном приложении. Похоже на джанго-регистрацию звонков 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()
внутри методов (а не на уровне модуля) и в FKs используйте что-то вроде:
user = ForeignKey(settings.AUTH_USER_MODEL)
Кстати, звонок в django.setup()
не должно требоваться в вашем manage.py
файл, он называется для вас в execute_from_command_line
, ( источник)
Просто столкнулся с той же проблемой. Проблема из-за 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)
Это работает для меня для 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 на свои
Другой вариант заключается в том, что у вас есть дубликат записи в INSTALLED_APPS. Это бросило эту ошибку для двух разных приложений, которые я тестировал. Очевидно, это не то, что проверяет Django, но кто достаточно глуп, чтобы дважды помещать одно и то же приложение в список. Я, это кто.
Я чертовски уверен, что еще не поздно. Если вы используете
Django 4
и файл для ваших настроек, вы столкнетесь с этой ошибкой, если вы определите значение в settings.py, в то время как это значение не существует в
.env
файл:
См. следующий сценарий:
У меня был PLAID_KEY в моем
settings.py
следующим образом
PLAID_KEY=env('PLAID_KEY')
Однако PLAID_KEY не существовал в моем файле .env, добавление его исправило.
Установите django-registration-redux==1.1 вместо django-registration, если вы используете django 1.7
Я столкнулся с этой проблемой, когда я использую djangocms и добавил плагин (в моем случае: djangocms-cascade). Конечно, мне пришлось добавить плагин в INSTALLED_APPS. Но порядок здесь важен.
Чтобы разместить cmsplugin_cascade до того, как cms решит проблему.
Есть ли у вас виртуальная среда Python, в которую нужно войти, прежде чем запускать manage.py?
Я сам столкнулся с этой ошибкой, и в этом была проблема.
Если вы получаете эту ошибку в контексте создания отношений 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')
Ваш 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)
Моя проблема была из init.py. я сделал приложение и хотел сделать это:
from MY_APP import myfunc
вместо того:
from MY_APP.views import myfunc
когда я откатил свои изменения в эти части. все работало нормально.