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 (ไม่มั่นคง) กระทำกัญชา ผมไม่เชื่อว่าคุณกำลังใช้จริง Django 1.7 (CF คำตอบของฉัน)
Kristian กระจก

คุณเคยแก้ไขปัญหาของคุณหรือไม่?
Nick Spacek

venvนอกจากนี้ยังอาจเกี่ยวข้องกับ การสร้างไดเรกทอรี venv ใหม่ให้แก้ไขเพื่อฉัน `` `mv venv venv_old แหล่งที่มา virtualv venv ./venv/bin/ เปิดใช้งาน pip install -r requirements.txt` ``
Thomas - BeeDesk

1
ฉันพบข้อผิดพลาดเช่นนี้เมื่อฉันเพิ่มการบันทึกใน settings.py บน mac ของฉันเพราะฉันสร้างไฟล์บันทึกใน /var/log/xx/debug.log และไม่มีสิทธิ์ดังนั้นฉันจึงใช้ sudo เพื่อ นักวิ่งและทุกอย่างไม่เป็นไรอาจช่วยสมชายชาตรีบางอย่าง
gkiwi

docker-compose exec ...ผมเห็นข้อผิดพลาดนี้เมื่อทำงาน ปัญหาก็คือว่าผมไม่ได้ผ่านตัวแปรสภาพแวดล้อมที่จำเป็นในการสั่ง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()

เมื่อฉันอัปเดตเป็นตัวจัดการ 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.7
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/th/dev/releases/1.7/… . โดยพื้นฐานแล้ว Django มีวิธีใหม่ในการโหลดแอพที่ติดตั้ง หากคุณโหลด Django จากสคริปต์ Python (เช่นเดียวกับฉันในการทดสอบหน่วยที่กำหนดเอง) การเริ่มต้นบางอย่างจำเป็นต้องทำก่อนที่จะดำเนินการต่อไปและเรียกการตั้งค่า () เป็นวิธีการทำ นอกจากนั้นความรุ่งโรจน์ของทีมการอัปเกรด 1.6.2 ถึง 1.7.1 ของฉันดูเหมือนจะเป็นงานจริงมูลค่าหนึ่งชั่วโมง
JL Peyret

12
ฉันจะรันคำสั่งด้านบนได้ที่ไหน ฉันเพิ่มลงในไฟล์. py หรืออะไร
KhoPhi

1
คุณควรเรียกใช้สิ่งนี้ในบริบทเดียวกับที่เกิดข้อผิดพลาด
Nimo

3
สิ่งนี้มี upvotes มากพอที่จะทำเครื่องหมายคำตอบที่ถูกต้อง
acid_crucifix

สิ่งนี้แก้ไขปัญหาที่ฉันมีในสคริปต์อัปเดตบรรทัดคำสั่ง
Jason Champion

58

ปัญหานี้อยู่ในแอปลงทะเบียนของคุณ ดูเหมือนว่าจะมีการลงทะเบียน 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()ภายในวิธีการ (และไม่ได้อยู่ที่ระดับโมดูล) และใน FKs ใช้สิ่งที่ชอบ:

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

Mine อยู่ที่.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 นั่นทำให้เกิดข้อผิดพลาดนี้สำหรับแอพสองตัวที่ฉันทดสอบ เห็นได้ชัดว่าไม่ใช่สิ่งที่ Django ตรวจสอบ แต่แล้วใครที่โง่พอที่จะวางแอพเดียวกันในรายการสองครั้ง ฉันว่าใคร


2

คุณมีสภาพแวดล้อมเสมือน Python ที่คุณต้องป้อนก่อนเรียกใช้ Manage.py หรือไม่

ฉันพบข้อผิดพลาดนี้เองและนั่นเป็นปัญหา


2

ฉันพบปัญหานี้เมื่อฉันใช้ djangocms และเพิ่มปลั๊กอิน (ในกรณีของฉัน: djangocms-cascade) แน่นอนฉันต้องเพิ่มปลั๊กอินใน INSTALLED_APPS แต่ลำดับสำคัญตรงนี้

หากต้องการวาง 'cmsplugin_cascade' ก่อน 'cms' จะแก้ไขปัญหาได้


1
คำสั่งไม่สำคัญ:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev


0

./manage.py migrate

นี่เป็นการแก้ไขปัญหาของฉัน


สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม หากต้องการวิจารณ์หรือขอคำชี้แจงจากผู้แต่งโปรดแสดงความคิดเห็นใต้โพสต์ของพวกเขา - จากการทบทวน
George Z.

@GeorgeZ ดูเหมือนว่ามีความพยายามที่จะตอบคำถามและเห็นได้ชัดว่าแก้ไขปัญหาเมื่อโปสเตอร์นี้วิ่งเข้ามา - แม้ว่าคุณคิดว่ามันผิดหรือควรจะเพิ่มเติมรายละเอียดเพิ่มเติมความพยายามที่แท้จริงในการตอบคำถามไม่ควรถูกลบออกจากการตรวจสอบ
CertainPerformance

-1

คุณmanage.pyคือ "ผิด"; ฉันไม่รู้ว่าคุณได้รับมาจากที่ใด แต่นั่นไม่ใช่ 1.7 manage.py- คุณเคยใช้งาน build-fun pre-release หรืออะไร?

รีเซ็ตของคุณ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.