Django meningkatkan ke 1.9 kesalahan “AppRegistryNotReady: Aplikasi belum dimuat.”

93

Saat memutakhirkan ke django 1.9 dari 1.8 saya mendapat kesalahan ini. Saya memeriksa jawaban untuk pertanyaan serupa, tetapi saya tidak berpikir ini adalah masalah dengan paket atau aplikasi pihak ketiga.

Traceback (most recent call last):
File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 176, in fetch_command
commands = get_commands()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 100, in wrapper
result = user_function(*args, **kwds)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 71, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 137, in get_app_configs
self.check_apps_ready()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

Saya telah memodifikasi aplikasi Terinstal untuk 'django.contrib.auth'.

Kishore K
sumber
1
apakah Anda menggunakan aplikasi pihak ketiga? Silakan bagikan settings.py
utkbansal
Saya menggunakan banyak aplikasi pihak ketiga, tapi saya yakin kesalahan ini muncul dari "django / apps / registry.py" dan bukan dari aplikasi lain dalam paket situs.
Kishore K
1
Saya menghadapi masalah serupa dengan django-crispy-forms karena ibrary belum mendukung 1.9. Jadi ini mungkin aplikasi yang tidak didukung.
utkbansal
1
Saya tidak menggunakan paket itu. Maaf Jika saya salah, jika itu terkait dengan paket apa pun, pelacakan akan mengarah ke aplikasi itu di paket situs, bukan?
Kishore K
Payu yang sama tidak mendukung 1.9
GrvTyagi

Jawaban:

125

Coba tambahkan baris ini ke bagian atas file pengaturan Anda:

import django
django.setup()

Dan jika ini tidak membantu Anda mencoba untuk menghapus aplikasi pihak ketiga dari daftar aplikasi yang Anda instal satu per satu.

inlanger
sumber
8
Saya mencobanya, tetapi saya mendapatkan kesalahan ini "django.core.exceptions.ImproperlyConfigured: Pengaturan SECRET_KEY tidak boleh kosong." Padahal saya sudah SECRET_KEY di file setting.
Kishore K
11
Coba deklarasikan SECRET_KEY SEBELUM baris yang disebutkan, seperti: SECRET_KEY = 'MY SECRET KEY' import django django.setup () bekerja untuk saya .... sekarang dengan kesalahan lain :)
Duda Nogueira
1
Ini adalah jawaban yang bagus untuk pertanyaan: "Bagaimana cara mengakses objek model Django dari skrip berdiri sendiri?" :-) Sebelum menjalankan kode di atas, Anda perlu melakukan: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser
1
Tidak berfungsi pada pengaturan tetapi berfungsi pada skrip mandiri saya. Pengecualian ini juga terjadi jika Anda lupa memanggil django.setup () dalam skrip Python mandiri. docs.djangoproject.com/en/1.10/ref/applications/…
André Duarte
30
django.setup()untuk digunakan dalam skrip yang berdiri sendiri. Anda tidak boleh memasukkannya ke dalam pengaturan
Alasdair
37

Saya akan memiliki fungsi kustom yang tertulis di salah satu __init__.pyfile model saya . Itu menyebabkan kesalahan. Ketika saya memindahkan fungsi ini __init__.pydarinya, itu berhasil.

Kishore K
sumber
3
Sama di sini, memindahkannya juga.
Brachamul
Perlu dicatat bahwa fungsi yang dikomentari dalam file ini juga dapat menyebabkan kesalahan ini.
B-Tron dari Autobots
25

Masalah saya adalah bahwa saya mencoba mengimpor model Django sebelum memanggil django.setup()

Ini berhasil untuk saya:

import django
django.setup()

from myapp.models import MyModel

Skrip di atas ada di folder root proyek.

M3RS
sumber
Saya menghadapi masalah ini saat menjalankan skrip, ini menyelesaikannya.
hampir menjadi pemula
14

Dalam kasus saya, kesalahan terjadi ketika saya membuat python manage.py makemigrationsdi Django 2.0.6.

Solusinya adalah dengan menjalankan python manage.py runserverdan melihat kesalahan sebenarnya (yang hanyalah variabel lingkungan yang hilang).

Pavel Vergeev
sumber
13

Kesalahan ini dapat terjadi saat Anda menambahkan aplikasi di INSTALLED_APPS dalam settings.pyfile tetapi Anda tidak menginstal aplikasi itu di komputer Anda. Anda punya dua solusi:

  1. Installaplikasi itu menggunakan manajer paket seperti pipdi ubuntu
  2. Atau Komentari aplikasi yang terinstal di settings.pyfile

Kesalahan ini juga dapat muncul jika Anda tidak berada di tempat virtual environmentyang mungkin Anda buat untuk proyek Anda.

Amrit
sumber
5

Coba hapus seluruh settings.LOGGINGdictConfig dan mulai ulang server. Jika berhasil, tulis ulang pengaturan sesuai dengan dokumentasi v1.9.

https://docs.djangoproject.com/en/1.9/topics/logging/#examples

pragmar
sumber
Terima kasih itu berhasil. Bagi saya, saya menggunakan file pengaturan linux di windows. Oleh karena itu /var/logjalur logfile tidak ada yang memberikan kesalahan ini
pratibha
5

Bagi saya, masalahnya berasal dari fakta bahwa saya mengimpor aplikasi INSTALLED_APPSyang dengan sendirinya mengimpor model dalam __init__.pyfilenya

Saya punya:

settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

myapp.__init__.py

from django.contrib.sites.models import Site

berkomentar import modelsdi myapp.__init__.pymembuatnya berhasil:

# from django.contrib.sites.models import Site
Albyorix
sumber
Saya memiliki masalah yang sama. Tapi saya perlu impor dalam kasus saya. Bagaimana Anda melakukannya?
JohnnyQ
Anda selalu dapat melakukan refaktorisasi untuk menghindari mengimpor model dari init . Opsi yang pasti akan berhasil adalah dengan memfaktor ulang file yang mengimpor aplikasi Anda, tetapi itu mungkin perubahan yang cukup berat. Pada akhirnya, itulah yang harus saya lakukan!
Albyorix
Masalah yang sama seperti @JohnnyQ. Bekerja dengan baik di 1.8 tetapi rusak di 1.9. Apakah ada dokumentasi yang relevan di suatu tempat? Pengecualian muncul karena impor Pengguna dari django.contrib.auth.models dalam kasus saya
Vinod
Telah menanyakan hal ini dalam pertanyaan terpisah di sini stackoverflow.com/questions/59927122/… dan mendapatkan jawabannya. Intinya, tidak ada cara lain selain refactor
Vinod
4

django.setup () di atas tidak akan bekerja saat Anda menjalankan skrip secara eksplisit. Masalah saya terpecahkan ketika saya menambahkan ini di bagian bawah file pengaturan

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import sys
if BASE_DIR not in sys.path:
    sys.path.append(BASE_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] =  "igp_lrpe.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "igp_lrpe.settings")
import django
django.setup()
Arup Barman
sumber
Saya menggunakan shell Pycharm dan ketik import djangodan django.setup(). Masalahnya sudah diatasi.
Seyed Hasan Mousavi
2

Untuk saya berkomentar

'grappelli.dashboard',
'grappelli',

di INSTALLED_APPS bekerja

algometrix
sumber
Bagi saya itu hanya bahwa saya tidak sengaja telah 'one_third_pary_app,'bukannya 'one_third_pary_app',(perhatikan posisi ,)
J0ANMM
2

Saya mendapatkan kesalahan itu saat mencoba menjalankan test.py(bukan skrip lengkap, saya tidak ingin menggunakan python manage.py test)

dan metode berikut berhasil untuk saya.

import os
import django
if 'env setting':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'YourRoot.settings')
    django.setup()
from django.test import TestCase
...

class SomeTest(TestCase):
    def test_one(self):  # <-- Now, I can run this function by PyCharm
        ...

    def test_two(self):
        ...
Carson
sumber
1

Masalah saya adalah: django-reversion> = 1.8.7, <1.9

untuk django 1.9.7 Anda harus menggunakan: django-reversion == 1.10.0

Saya meningkatkan django-cms 3.2 menjadi 3.3, dan menemukannya dengan memberi komentar pada aplikasi, kemudian membatalkan komentar kembali.

Jawaban yang benar di sini: https://stackoverflow.com/a/34040556/2837890

Anshik
sumber
1

Masalah ini juga diamati untuk settings.py yang tidak konsisten untuk kesalahan penulisan INSTALLED_APPS, verifikasi apakah Anda menyertakan aplikasi dengan benar dan dipisahkan dengan ",".

Waykos
sumber
1

Ketika saya mengubah versi django saya menjadi 1.9, itu tidak muncul kesalahan. pip uninstall django pip install django==1.9

admin
sumber
1

Saya memasukkan Userimpor ke dalam settingsfile untuk mengelola token panggilan lainnya seperti ini

# settings.py
from django.contrib.auth.models import User
def jwt_get_username_from_payload_handler(payload):
   ....

JWT_AUTH = {
    'JWT_PAYLOAD_GET_USERNAME_HANDLER': jwt_get_username_from_payload_handler,
    'JWT_PUBLIC_KEY': PUBLIC_KEY,
    'JWT_ALGORITHM': 'RS256',
    'JWT_AUDIENCE': API_IDENTIFIER,
    'JWT_ISSUER': JWT_ISSUER,
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

Karena pada saat itu, Django libs belum siap. Oleh karena itu, saya meletakkan fungsi importdi dalam dan itu mulai bekerja. Fungsi tersebut harus dipanggil setelah server dimulai

Thai Tran
sumber
0

Dalam kasus saya, salah satu pengaturan saya, 'CORS_ORIGIN_WHITELIST' ditetapkan di file settings.py tetapi tidak tersedia di file .env saya. Jadi saya akan menyarankan agar Anda memeriksa pengaturan Anda, terutama yang tertaut ke .env

medobills
sumber
0

Seperti yang dikatakan orang lain, ini dapat disebabkan ketika Anda belum memasang aplikasi yang terdaftar di INSTALLED_APPS.

Dalam kasus saya, manage.pymencoba untuk mencatat pengecualian, yang menyebabkan upaya untuk membuatnya gagal karena aplikasi belum diinisialisasi. Dengan mengomentari exceptklausa dalam manage.pypengecualian ditampilkan tanpa rendering khusus, menghindari kesalahan yang membingungkan.

# Temporarily commenting out the log statement.
#try:
    execute_from_command_line(sys.argv)
#except Exception as e:
#    log.error('Admin Command Error: %s', ' '.join(sys.argv), exc_info=sys.exc_info())
#    raise e
John Lehmann
sumber
0

Saya mencoba banyak hal, tetapi hanya menurunkan Django ke 1.8.18 memperbaiki masalah ini untuk saya:

pip install django==1.8.18

Ini adalah salah satu aplikasi terpasang yang gagal, tetapi saya tidak dapat menemukan yang mana.

oriadam
sumber
0

Saya mendapatkan kesalahan itu ketika saya mencoba menjalankan:

python manage.py makemigrations

saya mencoba banyak hal dan menyadari bahwa saya menambahkan beberapa referensi ke "settings.py" - "INSTALLED_APPS"

Pastikan apa yang Anda tulis di sana benar. Kesalahan saya adalah ".model." bukannya ".app."

Memperbaiki kesalahan itu dan berhasil sekarang.

Kastor
sumber
-1

Terlambat ke pesta, tapi grappelli adalah alasan kesalahanku juga. Saya mencari versi yang kompatibel di pypi dan itu memperbaikinya untuk saya.

lslaz.dll
sumber
-1

Coba aktifkan virtual env. Dalam kasus saya, menggunakan alat baris perintah git:

source scripts/activate

Memecahkan masalah saya.

Stephen Mwangi Wanjohi
sumber
-1

Dapatkan kesalahan ini saat mencoba mengakses objek model di apps.py:

class QuizConfig(AppConfig):
name = 'quiz'

def ready(self):
    print('===============> Django just started....')
    questions_by_category = Question.objects.filter(category=2) # <=== Guilty line of code.

Mencoba mengakses Questionsebelum aplikasi memuat kelas model menyebabkan kesalahan bagi saya.

Ojonugwa Jude Ochalifu
sumber
Apakah model Questiondidefinisikan di models.py dari AppConfig ini?
Gustavo_fringe
Ya, itu didefinisikan di sana
Ojonugwa Jude Ochalifu
-2

Jika file setting.py Anda benar, Anda dapat mencoba untuk membuka file manage.py lanjutkan panggilan danjgo.setup () dalam metode utama. Kemudian jalankan manage.py, terakhir jalankan lagi proyek, masalah bisa hilang.

xing liu
sumber
-2

Dalam modul "admin" pada paket aplikasi Anda, daftarkan semua database yang dibuat dalam modul "model" dari paket tersebut.

Misalkan Anda memiliki kelas database yang ditentukan dalam modul "model" sebagai:

class myDb1(models.Model):
    someField= models.Charfiled(max_length=100)

jadi Anda harus mendaftarkan ini di modul admin sebagai:

from .models import myDb1
admin.site.register(myDb1)

Saya harap ini menyelesaikan kesalahan.

Preetam
sumber