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)

Я получаю эту ошибку, когда пытаюсь использовать registration приложение в Django 1.7

Ответ 1

Это то, что разрешило это для нас и этих людей:

Наш проект начался с 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()

Теперь все работает.

Ответ 2

Выполнение этих команд решило мою проблему (кредит этот ответ):

import django
django.setup()

Однако я не уверен, зачем мне это нужно. Комментарии будут оценены.

Ответ 3

Проблема в вашем регистрационном приложении. Кажется, что django-регистрация вызывает 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 script был в корне проекта 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

У вас есть виртуальная среда Python, которую нужно ввести, прежде чем запускать manage.py?

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

Ответ 8

Я столкнулся с этой проблемой, когда использовал djangocms и добавил плагин (в моем случае: djangocms-cascade). Конечно, мне пришлось добавить плагин к INSTALLED_APPS. Но порядок здесь важен.

Поместить 'cmsplugin_cascade' до 'cms' решил проблему.

Ответ 9

установить django-registration-redux == 1.1 вместо django-registration, если вы используете django 1.7

Ответ 10

./manage.py migrate

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

Ответ 11

Ваш manage.py является "неправильным"; Я не знаю, откуда вы его взяли, но это не 1,7 manage.py - вы использовали какую-то фанк-сборку перед выпуском или что-то еще?

Reset ваш 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)