Django 1.7 melempar django.core.exceptions.AppRegistryNotReady: Model belum dimuat


166

Ini adalah traceback di sistem windows saya.

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.

Dan manage.py saya terlihat seperti ini:

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)

Saya mendapatkan kesalahan ini ketika saya mencoba menggunakan aplikasi pendaftaran di Django 1.7


1
Anda memiliki direktori bernama django-django-4c85a0d; 4c85a0dkebetulan menjadi (tidak stabil) Django melakukan hash. Saya tidak percaya Anda benar-benar menggunakan Django 1.7 (lihat jawaban saya)
Kristian Glass

Apakah Anda pernah menyelesaikan masalah Anda?
Nick Spacek

Ini juga bisa berhubungan dengan venv. Membuat direktori venv memperbaikinya untuk saya. `` `mv venv venv_old sumber virtualenv venv ./venv/bin/ aktifkan instalasi pip -r requirement.txt` ``
Thomas - BeeDesk

1
Saya juga menemui beberapa kesalahan seperti ini ketika saya menambahkan LOGGING di settings.py di mac saya, ini karena saya membuat file log di /var/log/xx/debug.log dan tidak memiliki izin, jadi saya menggunakan sudo untuk runserver, dan semuanya baik-baik saja. Boleh saya bantu beberapa gay
gkiwi

Saya melihat kesalahan ini ketika menjalankan docker-compose exec .... Masalahnya adalah bahwa saya tidak meneruskan variabel lingkungan yang diperlukan ke perintah docker-compose exec .
Matthew Hegarty

Jawaban:


59

Inilah yang memecahkannya untuk kita dan orang-orang ini :

Proyek kami dimulai dengan Django 1.4, kami pergi ke 1,5 dan kemudian ke 1,7. Wsgi.py kami terlihat seperti ini:

import os

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

Ketika saya memperbarui ke pengendali WSGI gaya 1.7:

import os

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

Semuanya berfungsi sekarang.


1
Saya tidak setuju dengan hasil edit dari @wim, bukan karena saya pikir kita harus meninggalkan impor yang tidak perlu, tetapi karena saya memberikan contoh seperti apa wsgi.py yang di-autogenerasi sebelumnya, dan seperti apa setelah saya salin perbedaan dari 1,7 wsgi.py autogenerated
Nick Spacek

1
File autogenerated wsgi.pytidak pernah memiliki import sysdi dalamnya. Bukan di 1.4, bukan di 1.5, dan bukan di 1.7. Jika Anda memilikinya di sana, itu ditambahkan secara manual oleh seseorang - itu tidak ditambahkan oleh django-admin startproject.
wim

Baik untuk tahu, kesalahan saya (dan memori buruk). Sudah lama sejak saya membuat ini tetapi saya cukup yakin bahwa pada saat itu saya mencoba untuk mendokumentasikan perilaku bawaan.
Nick Spacek

236

Menjalankan perintah ini memecahkan masalah saya (kredit untuk jawaban ini ):

import django
django.setup()

Namun saya tidak yakin mengapa saya membutuhkan ini. Komentar akan dihargai.


12
Maaf, hanya menirukan apa yang saya baca di catatan rilis Django 1.7 tentang memecah perubahan. docs.djangoproject.com/en/dev/releases/1.7/… . Pada dasarnya, Django memiliki cara baru untuk memuat aplikasi yang diinstal. Jika Anda memuat Django dari skrip Python (seperti saya dalam tes unit kustom saya), beberapa inisialisasi perlu dilakukan sebelum melanjutkan dan memanggil setup () adalah cara melakukannya. Selain itu, pujian untuk tim, upgrade saya 1.6.2 ke 1.7.1 tampaknya bernilai satu jam kerja nyata.
JL Peyret

12
Di mana saya menjalankan perintah di atas? Saya menambahkannya ke file .py atau apa?
KhoPhi

1
Anda harus menjalankan ini dalam konteks yang sama dengan kesalahan yang terjadi
Nimo

3
ini memiliki cukup upvotes yang pantas ditandai jawaban yang benar
acid_crucifix

Ini juga memecahkan masalah yang saya miliki dalam skrip pembaruan baris perintah yang rusak saat pindah ke 1.7.
Jason Champion

58

Masalahnya ada di aplikasi pendaftaran Anda. Tampaknya panggilan Django-pendaftaran get_user_module()di models.pypada tingkat modul (ketika model masih sedang dimuat oleh proses pendaftaran aplikasi). Ini tidak lagi berfungsi:

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User    

Saya akan mengubah file model ini untuk hanya memanggil get_user_model()metode di dalam (dan bukan pada tingkat modul) dan di FK menggunakan sesuatu seperti:

user = ForeignKey(settings.AUTH_USER_MODEL)

BTW, panggilan untuk django.setup()tidak harus diperlukan dalam Anda manage.pyberkas, itu disebut untuk Anda dalam execute_from_command_line. ( sumber )


memasukkannya ke dalam if __name__ == '__main__':bekerja untuk saya tetapi saya tidak tahu apakah itu solusi yang baik.
Umair A.

@Neutralizer Tidak yakin bagaimana Anda melakukan itu, tetapi itu tidak akan berhasil karena Django mengimpor modul ini. Mungkin Anda menghindari dep edaran dengan tidak mengimpor model Pengguna sama sekali.
gonz

1
Maksud saya, letakkan baris-baris itu di dalam cek nama. Mungkin melewatkan eksekusi. Saya belum membuat cukup tes.
Umair A.

18

Baru saja mengalami masalah yang sama. Masalahnya adalah karena django-registrationtidak kompatibel dengan model pengguna Django 1.7.

Perbaikan sederhana adalah dengan mengubah baris kode ini, pada django-registrationmodul yang Anda instal ::

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User  

untuk::

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 

Milik saya di .venv/local/lib/python2.7/site-packages/registration/models.py(virtualenv)


7
Anda dapat menggunakan django-registrasi-redux sebagai gantinya. Garpu ini diperbarui dan dirawat: github.com/macropin/django-registration
TJL

1
django-registration-reduxmemperbaiki masalah ini untuk saya (saya memiliki tumpukan yang sama persis dengan OP)
Pierre de LESPINAY

1
Jika ada yang berjuang dengan ini pada Django 1.8, itu juga berlaku di sana.
Andrew Schuster

14

Ini bekerja untuk saya untuk Django 1.9. Skrip Python yang akan dieksekusi adalah root dari proyek Django.

    import django 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_NAME.settings")
    django.setup()
    from APP_NAME.models import *

Setel PROJECT_NAME dan APP_NAME ke milik Anda


1
Ini bekerja untuk saya. tapi saya tidak tahu mengapa kita harus menjalankan kode ini karena kami sudah menyebutkan ini di file wsgi kami.
Kode Pak

5

Opsi lain adalah Anda memiliki entri duplikat di INSTALLED_APPS. Itu melemparkan kesalahan ini untuk dua aplikasi berbeda yang saya uji. Tampaknya itu bukan sesuatu yang diperiksa Django, tapi kemudian siapa yang cukup konyol untuk memasukkan aplikasi yang sama ke daftar dua kali. Aku, itu siapa.


2

Apakah Anda memiliki lingkungan virtual Python yang harus Anda masukkan sebelum menjalankan manage.py?

Saya mengalami kesalahan ini sendiri, dan itulah masalahnya.


2

Saya mengalami masalah ini ketika saya menggunakan djangocms dan menambahkan sebuah plugin (dalam kasus saya: djangocms-cascade). Tentu saja saya harus menambahkan plugin ke INSTALLED_APPS. Tapi urutannya di sini penting.

Untuk menempatkan 'cmsplugin_cascade' sebelum 'cms' menyelesaikan masalah.


1
pesanan memang penting:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev

2

instal django-registration-redux == 1.1 sebagai ganti django-registrasi, jika Anda menggunakan django 1.7


0

./manage.py migrate

Ini menyelesaikan masalah saya


Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka. - Dari Ulasan
George Z.

@ GeorgeZ. Sepertinya ini adalah upaya untuk menjawab pertanyaan, dan tampaknya menyelesaikan masalah ketika poster ini menabraknya - bahkan jika Anda pikir itu salah atau harus dijabarkan lebih lanjut, upaya tulus untuk menjawab pertanyaan tidak boleh dihapus dari ulasan
Performa Tertentu

-1

Anda manage.py"salah"; Saya tidak tahu dari mana Anda mendapatkannya, tetapi itu bukan 1,7 manage.py- apakah Anda menggunakan beberapa prapembebasan yang funky atau semacamnya?

Atur ulang Anda manage.pyke konvensional, seperti di bawah ini, dan hal-hal Seharusnya Bekerja:

#!/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)

Saya memiliki manage.py seperti itu dan saya masih memiliki masalah ini
rmosolgo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.