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장고 커밋 해시 (안정적이지 않은)입니다. 실제로 장고 1.7을 사용하고 있다고 믿지 않습니다. (내 답변 참조)
Kristian Glass

문제를 해결 한 적이 있습니까?
Nick Spacek

이 또한 관련 될 수 있습니다 venv. venv 디렉토리를 다시 작성하면 해결되었습니다. ```MV venv venv_old VIRTUALENV venv 소스 ./venv/bin/activate 핍은```-r requirements.txt를 설치
토마스 - BeeDesk

1
내 Mac에서 settings.py에 LOGGING을 추가 할 때 이와 같은 오류가 발생합니다 ./var/log/xx/debug.log에 로그 파일을 만들고 권한이 없기 때문에 sudo를 사용합니다. runserver, 그리고 everthing은
괜찮습니다.

실행할 때이 오류가 발생했습니다 docker-compose exec .... 문제는 필요한 환경 변수를 docker-compose exec 명령에 전달하지 않았다는 것 입니다.
Matthew Hegarty

답변:


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()

1.7 스타일 WSGI 핸들러로 업데이트했을 때 :

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와의 차이점
Nick Spacek

1
자동 생성 된 wsgi.py파일에는 파일이 없습니다 import sys. 1.4는 아니고 1.5는 아니고 1.7은 아닙니다. 거기에 있으면 누군가가 수동으로 추가 한 것입니다. django-admin startproject는 추가하지 않았습니다.
wim

알아두면 좋은 나의 실수 (그리고 기억력이 부족하다). 이 작업을 수행한지 오래되었지만 시간이 지났을 때 내장 된 동작을 문서화하려고했습니다.
Nick Spacek

236

이 명령을 실행하면 내 문제가 해결되었습니다 ( 이 답변에 대한 신용 ) :

import django
django.setup()

그러나 왜 이것이 필요한지 잘 모르겠습니다. 의견을 부탁드립니다.


12
죄송합니다. django 1.7 릴리스 정보에서 읽은 내용을 변경하여 변경 사항을 파킹하는 것만으로도 앵무새입니다. docs.djangoproject.com/en/dev/releases/1.7/... . 기본적으로 장고에는 설치된 앱을로드하는 새로운 방법이 있습니다. 파이썬 스크립트에서 Django를로드하면 (사용자 정의 단위 테스트에 있었던 것처럼) 계속 진행하고 setup ()을 호출하기 전에 초기화를 수행해야합니다. 그 외에도 팀에 대한 저의 1.6.2에서 1.7.1 로의 업그레이드는 한 시간 분량의 실제 작업으로 보입니다.
JL Peyret

12
위의 명령을 어디에서 실행합니까? .py 파일에 추가합니까?
KhoPhi

1
오류가 발생하는 것과 동일한 컨텍스트에서이를 실행해야합니다.
Nimo

3
이 장점을 충분히 upvotes을 가지고하면 정답 표시되고
acid_crucifix

이것은 또한 1.7로 이동하는 명령 줄 업데이트 스크립트에서 발생하는 문제를 해결했습니다.
Jason Champion

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()메소드 내부 에서만 호출 하고 모듈 레벨 에서는 호출 하지 않도록 변경했으며 FK에서는 다음과 같은 것을 사용합니다.

user = ForeignKey(settings.AUTH_USER_MODEL)

BTW, 파일에 대한 호출이 django.setup()필요하지 않습니다 . manage.py에서 호출됩니다 execute_from_command_line. ( 소스 )


그것을 안에 넣는 것이 if __name__ == '__main__':나에게 효과적이지만 그것이 좋은 해결책인지는 모른다.
Umair A.

@Neutralizer 어떻게하고 있는지 잘 모르겠지만 django 가이 모듈을 가져 오기 때문에 작동하지 않습니다. 아마도 사용자 모델을 전혀 가져 오지 않으면 서 원형 뎁을 피할 수 있습니다.
gonz

1
그 줄을 이름 확인 안에 넣으십시오. 실행을 건너 뛰었을 수 있습니다. 테스트를 충분히하지 못했습니다.
Umair A.

18

같은 문제가 발생했습니다. 문제는 django-registrationdjango 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나를 위해 문제를 해결했습니다 (OP와 정확히 동일한 스택을 가졌습니다)
Pierre de LESPINAY

1
Django 1.8 에서이 문제로 어려움을 겪고있는 사람도 적용됩니다.
Andrew Schuster

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 파일에서 이미 언급 한 것처럼이 코드를 실행 해야하는 이유를 모르겠습니다.
Mr Code

5

또 다른 옵션은 INSTALLED_APPS에 중복 항목이 있다는 것입니다. 그것은 내가 테스트 한 두 개의 다른 앱에 대해이 오류를 던졌습니다. 분명히 장고가 확인하는 것이 아니라 동일한 앱을 목록에 두 번 넣을 정도로 바보 같은 사람입니다. 나 그 사람이야


2

manage.py를 실행하기 전에 입력해야하는 Python 가상 환경이 있습니까?

나는이 오류에 직접 부딪쳤다. 그리고 그것은 문제였다.


2

djangocms를 사용하고 플러그인 (내 경우에는 djangocms-cascade)을 추가 할 때이 문제가 발생했습니다. 물론 플러그인을 INSTALLED_APPS에 추가해야했습니다. 그러나 여기 순서가 중요합니다.

'cms' 전에 'cmsplugin_cascade'를 배치 하면 문제가 해결되었습니다.


1
명령은 중요했다 :cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev

2

django 1.7을 사용하는 경우 django-registration-redux == 1.1 대신 django-registration을 설치하십시오.



-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)

저것과 같은 manage.py가 있고 여전히이 문제가 있습니다
rmosolgo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.