Django 1.7 genera django.core.exceptions.AppRegistryNotReady: i modelli non sono ancora stati caricati


166

Questo è il traceback sul mio sistema 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.

E il mio manage.py si presenta così:

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)

Ottengo questo errore quando provo a utilizzare l' app di registrazione in Django 1.7


1
Hai una directory chiamata django-django-4c85a0d; 4c85a0dsembra essere un hash di commit Django (non stabile). Non credo che stai usando Django 1.7 (vedi la mia risposta)
Kristian Glass,

Hai mai risolto il tuo problema?
Nick Spacek,

Questo potrebbe anche riguardare venv. Ricreare la directory venv l'ha risolto per me. `` `` mv venv venv_old virtualenv venv source ./venv/bin/activate pip install -r Requisiti.txt '' ``
Thomas - BeeDesk

1
Riscontro anche qualche errore come questo quando aggiungo LOGGING in settings.py sul mio mac, questo perché creo un file di registro su /var/log/xx/debug.log e non ho i permessi, quindi uso sudo per ran server, e tutto va bene. Può aiutare alcuni gay
gkiwi,

Ho visto questo errore durante l'esecuzione docker-compose exec .... Il problema era che non stavo passando le variabili di ambiente richieste al comando docker-compose exec .
Matthew Hegarty,

Risposte:


59

Questo è ciò che ha risolto per noi e queste persone :

Il nostro progetto è iniziato con Django 1.4, siamo passati alla 1.5 e poi alla 1.7. Il nostro wsgi.py sembrava così:

import os

from django.core.handlers.wsgi import WSGIHandler

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

Quando ho aggiornato il gestore WSGI di stile 1.7:

import os

from django.core.wsgi import get_wsgi_application

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

Ora funziona tutto.


1
Non sono d'accordo con la modifica di @wim, non perché penso che dovremmo lasciare l'importazione non necessaria, ma perché stavo dando un esempio di come appariva il wsgi.py autogenerato prima e di come appariva dopo che avevo copiato le differenze rispetto al wsgi.py autogenerato 1.7
Nick Spacek,

1
Il wsgi.pyfile generato automaticamente non contiene mai un file import sys. Non in 1.4, non in 1.5 e non in 1.7. Se l'hai avuto lì, è stato aggiunto manualmente da qualcuno - non è stato aggiunto da django-admin startproject.
mercoledì

Buono a sapersi, mio ​​errore (e scarsa memoria). Era passato un po 'di tempo da quando l'ho realizzato, ma ero abbastanza sicuro che al momento stavo cercando di documentare il comportamento integrato.
Nick Spacek,

236

L'esecuzione di questi comandi ha risolto il mio problema (merito a questa risposta ):

import django
django.setup()

Tuttavia non sono sicuro del motivo per cui ho bisogno di questo. I commenti sarebbero apprezzati.


12
Mi dispiace, sto solo pappagallo di ciò che ho letto sulle note di rilascio di django 1.7 sulle modifiche non riuscite. docs.djangoproject.com/en/dev/releases/1.7/… . Fondamentalmente, Django ha un nuovo modo per caricare l'app installata. Se carichi Django da uno script Python (come se fossi nei miei test di unità personalizzati), è necessario eseguire alcune inizializzazioni prima di procedere e chiamare setup () è come farlo. A parte questo, complimenti per la squadra, il mio aggiornamento da 1.6.2 a 1.7.1 sembra valere un'ora di lavoro reale.
JL Peyret,

12
Dove posso eseguire il comando sopra? Lo aggiungo a un file .py o cosa?
KhoPhi,

1
Dovresti eseguirlo nello stesso contesto in cui si verifica l'errore
Nimo,

3
questo ha abbastanza voti da meritare di essere contrassegnato come risposta corretta
acid_crucifix

Ciò ha anche risolto un problema che ho avuto in uno script di aggiornamento della riga di comando che si è interrotto nel passaggio a 1.7.
Jason Champion il

58

Il problema è nella tua app di registrazione. Sembra chiamate django-registrazione get_user_module()in models.pyad un livello di modulo (quando i modelli sono ancora in corso di caricamento da parte del processo di registrazione di applicazione). Questo non funzionerà più:

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()Modificherei questo file di modelli per chiamare solo metodi interni (e non a livello di modulo) e negli FK uso qualcosa del tipo:

user = ForeignKey(settings.AUTH_USER_MODEL)

A proposito, la chiamata a django.setup()non dovrebbe essere richiesta nel tuo manage.pyfile, è chiamata per te in execute_from_command_line. ( fonte )


metterlo dentro if __name__ == '__main__':funziona per me ma non so se sia una buona soluzione.
Umair A.,

@Neutralizer Non sei sicuro di come lo stai facendo, ma non dovrebbe funzionare poiché Django sta importando questo modulo. Probabilmente stai evitando il reparto circolare non importando affatto il modello utente.
gonz,

1
Voglio dire, metti quelle righe nel controllo del nome. Potrebbe saltare l'esecuzione. Non ho fatto abbastanza test.
Umair A.

18

Ho appena riscontrato lo stesso problema. Il problema è a causa django-registrationdell'incompatibilità con il modello utente di django 1.7.

Una semplice soluzione è quella di cambiare queste righe di codice, sul django-registrationmodulo installato :

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

per::

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 

Il mio è a .venv/local/lib/python2.7/site-packages/registration/models.py(virtualenv)


7
Puoi invece usare django-registration-redux. È aggiornato e mantenuto fork: github.com/macropin/django-registration
TJL

1
django-registration-reduxrisolto il problema per me (avevo esattamente lo stesso stack dell'OP)
Pierre de LESPINAY,

1
Nel caso in cui qualcuno fosse alle prese con questo su Django 1.8, si applica anche lì.
Andrew Schuster,

14

Questo funziona per me per Django 1.9. Lo script Python da eseguire era alla radice del progetto Django.

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

Imposta PROJECT_NAME e APP_NAME sul tuo


1
Per me funziona. ma non so perché dovremmo eseguire questo codice come già menzionato nel nostro file wsgi.
Sig. Code

5

Un'altra opzione è che hai una voce duplicata in INSTALLED_APPS. Ciò ha generato questo errore per due diverse app che ho testato. Apparentemente non è qualcosa che Django controlla, ma poi chi è abbastanza sciocco da mettere la stessa app nell'elenco due volte. Io, ecco chi.


2

Hai un ambiente virtuale Python che devi inserire prima di eseguire manage.py?

Mi sono imbattuto in questo errore me stesso, e quello era il problema.


2

Ho riscontrato questo problema quando utilizzo djangocms e ho aggiunto un plugin (nel mio caso: djangocms-cascade). Ovviamente ho dovuto aggiungere il plugin a INSTALLED_APPS. Ma l'ordine è qui importante.

Posizionare "cmsplugin_cascade" prima di "cms" ha risolto il problema.


1
l'ordine cms, mptt, menus, sekizai, filer, easy_thumbnails
contava

2

installare django-registration-redux == 1.1 invece django-registration, se si utilizza django 1.7


0

./manage.py migrate

Questo ha risolto il mio problema


Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post. - Dalla recensione
George Z.

@GeorgeZ. Sembra un tentativo di rispondere alla domanda e apparentemente risolto il problema quando questo poster si è imbattuto in esso - anche se pensi che sia sbagliato o debba essere elaborato di più, un vero tentativo di rispondere alla domanda non dovrebbe essere eliminato dalla revisione
CertainPerformance

-1

Il tuo manage.pyè "sbagliato"; Non so da dove l'hai preso, ma non è un 1.7 manage.py- stavi usando una build pre-release funky o qualcosa del genere?

Ripristina il tuo manage.pyconvenzionale, come di seguito, e le cose dovrebbero funzionare:

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

Ho un manage.py come quello e ho ancora questo problema
rmosolgo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.