Django 1.7 кидає django.core.exceptions.AppRegistryNotReady: Моделі ще не завантажені


166

Це простеження в моїй системі 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


1
У вас є каталог, який називається django-django-4c85a0d; 4c85a0dтрапляється (нестабільний) Django здійснює хеш. Я не вірю, що ви насправді використовуєте Джанго 1.7 (див. Мою відповідь)
Крістіан Гласс

Ви коли-небудь вирішували своє питання?
Нік Спейпк

Це також може бути пов'язане з venv. Відтворення каталогу venv виправило це для мене. `` `mv venv venv_old virtualenv venv source ./venv/bin/activate pip install -r вимоги.txt` ``
Thomas - BeeDesk

1
Я також зустрічаю подібну помилку, як це, коли я додаю LOGGING у settings.py на своєму mac, це тому, що я створюю файл журналу на /var/log/xx/debug.log і не маю дозволу, тому я використовую sudo для runserver, і все добре. Можливо, допоможіть геям
gkiwi

Я побачив цю помилку під час запуску docker-compose exec .... Проблема полягала в тому, що я не передав потрібні змінні середовища середовищу команді docker-compose exec .
Меттью

Відповіді:


59

Ось що це вирішило для нас і цих людей :

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

Все працює зараз.


1
Я не згоден з редакцією від @wim, не тому, що я думаю, що ми повинні залишити непотрібний імпорт, а тому, що я наводив приклад того, як виглядав автогенерований wsgi.py раніше, і як це виглядало після того, як я скопіював відмінності від 1.7 автогенерованих wsgi.py.
Нік Спейпк

1
Автогенерований wsgi.pyфайл ніколи не містить import sysв ньому. Не в 1,4, не в 1,5 і не в 1,7. Якщо у вас він був там, його хтось додав вручну - він не додається стартовим проектом django-admin.
Вім

Добре знати, моя помилка (і погана пам’ять). Минув час, коли я це зробив, але я був впевнений, що в той час я намагався задокументувати побудовану поведінку.
Нік Спейпк

236

Запуск цих команд вирішив мою проблему (заслуговує на цю відповідь ):

import django
django.setup()

Однак я не впевнений, навіщо мені це потрібно. Коментарі будуть вдячні.


12
Вибачте, я просто папугувавши те, що я прочитав у примітках до випуску django 1.7 про порушення змін. docs.djangoproject.com/en/dev/releases/1.7 / ... . В основному, у Django є новий спосіб завантаження встановленого додатка. Якщо ви завантажуєте Django із сценарію Python (як я був у моїх тестах на власні одиниці), перед початком та викликом налаштування () потрібно зробити певну ініціалізацію, як це зробити. Окрім цього, кудо команді, моє оновлення 1.6.2 до 1.7.1 здається реальною роботою за годину.
JL Peyret

12
Де я запускаю вищевказану команду? Я додаю його у файл .py чи що?
ХоФі

1
Ви повинні запустити це в тому ж контексті, що і помилка
Німо

3
для цього достатньо обґрунтованих результатів, щоб було позначено правильну відповідь
acid_crucifix

Це також вирішило проблему, яку я мав у скрипті оновлення командного рядка, який перейшов у хід до 1.7.
Чемпіон Джейсона

58

Проблема полягає у вашій програмі реєстрації. Здається , Джанго-реєстрація дзвінків 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. ( джерело )


введення його всередині if __name__ == '__main__':працює для мене, але я не знаю, чи це хороше рішення.
Умаїр А.

@Neutralizer Не впевнений, як це робити, але це не повинно працювати, оскільки django імпортує цей модуль. Можливо, ви уникаєте кругової картини, навіть не імпортуючи модель користувача.
gonz

1
Я маю на увазі поставити ці рядки всередині перевірки імені. Це може пропустити виконання. Я не зробив достатньо тестів.
Умаїр А.

18

Щойно зіткнувся з тим же питанням. Проблема полягає в 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)


7
Ви можете використовувати замість нього django-registration-redux. Оновлений і підтримується вилка: github.com/macropin/django-registration
TJL

1
django-registration-reduxвиправили проблему для мене (у мене був такий самий стек, що і в ОП)
П'єр де ЛЕСПІНАЙ

1
Якщо хтось із цим стикався на Django 1.8, це також застосовується і там.
Ендрю Шустер

14

Це для мене працює для 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 як свої


1
Це працює для мене. але я не знаю, навіщо нам запускати цей код, як про них ми вже згадували у нашому файлі wsgi.
Код пана

5

Інший варіант полягає в тому, що у вас є повторюваний запис у INSTALLED_APPS. Ця помилка кинула дві різні тестовані програми. Мабуть, це не те, на що Джанго перевіряє, але тоді хто досить дурний, щоб той самий додаток помістити в список двічі. Я, ось хто.


2

Чи є у вас віртуальне середовище Python, яке вам потрібно ввести, перш ніж запустити Manag.py?

Я сам наткнувся на цю помилку, і в цьому була проблема.


2

Я зіткнувся з цим питанням, коли використовую djangocms і додав плагін (у моєму випадку: djangocms-cascade). Звичайно, мені довелося додати плагін до INSTALLED_APPS. Але тут важливий порядок.

Щоб розмістити "cmsplugin_cascade" перед тим, як "cms" вирішив проблему.


1
Порядок мав значення:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev


0

./manage.py migrate

Це вирішило моє питання


Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх публікацією. - З огляду
Джордж З.

@GeorgeZ. Це схоже на спробу відповісти на питання, і, мабуть, вирішило проблему, коли цей плакат наткнувся на нього - навіть якщо ви вважаєте, що це неправильно або його слід детальніше розробити, справжню спробу відповісти на це питання не слід видаляти з огляду
CertainPerformance

-1

Ваше 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)

У мене є такий файл Manag.py, і я все ще маю цю проблему
rmosolgo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.