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?

Я сам столкнулся с этой ошибкой, и в этом была проблема.

./manage.py migrate

Это решило мою проблему

Если вы получаете эту ошибку в контексте создания отношений 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

когда я откатил свои изменения в эти части. все работало нормально.

Другие вопросы по тегам