2014-04-13 11 views
11

Ho usato [registrazione django] (https://bitbucket.org/ubernostrum/django-registration) e ora ho iniziato a usare django 1.7b1 e qui si trova l'errore che sto ricevendo l'errore copiato di seguito. E 'risuscitato dai django-registrazione in models.py:Problema di compatibilità con la registrazione di Django con django 1.7

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

e sembra che viene sollevata perché get_user_model() viene chiamato prima che il registro applicazione è pronta. Non sono sicuro se questo è un problema di compatibilità o no, se sì c'è una soluzione semplice per questo? e se no, puoi aiutarmi a identificare ciò che sto facendo male?

RuntimeError: App registry isn't ready yet. 
File "/Users/nima/pe-dev/manage.py", line 9, in <module> 
    execute_from_command_line(sys.argv) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/core/management/__init__.py", line 427, in execute_from_command_line 
    utility.execute() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/core/management/__init__.py", line 391, in execute 
    django.setup() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 106, in populate 
    app_config.import_models(all_models) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/config.py", line 190, in import_models 
    self.models_module = import_module(models_module_name) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
File "/Library/Python/2.7/site-packages/registration/models.py", line 15, in <module> 
    User = get_user_model() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/contrib/auth/__init__.py", line 136, in get_user_model 
    return django_apps.get_model(settings.AUTH_USER_MODEL) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 187, in get_model 
    self.check_ready() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 119, in check_ready 
    raise RuntimeError("App registry isn't ready yet.") 

risposta

25

Non utilizzare la registrazione django disponibile da PyPI. Non supporta Django 1.7 e sembra che non lo farà mai. Il maintainer del repo ha abdicato e il progetto sembra non mantenuto.

C'è una forchetta di manutenzione disponibile su Github, che ha funzionato bene per me con Django 1.7:

https://github.com/macropin/django-registration

E 'disponibile da PyPI come django-registrazione-redux.

https://pypi.python.org/pypi/django-registration-redux/

È possibile installare utilizzando pip:

pip install django-registration-redux

+0

Tu signore - e github utente macropin - mi ha salvato. –

+1

Su pip: pip installa django-registration-redux –

+1

Grazie per il suggerimento @VisgeanSkeloru. Ho aggiornato la risposta per riflettere il processo di installazione molto più semplice. – ptevans

2

This note indirizzi il tuo problema.

penso che il modo migliore per importare Utente:

from django.conf import settings 
User = settings.AUTH_USER_MODEL 

EDIT:

Sembra che questo problema è stato notato, ma l'amministratore progetto è difficile di fare il cambiamento. link. Questo è un problema più grande con gli aggiornamenti in Django 1.7.

Direi che è possibile: (1) inserire il repository e apportare la modifica da soli oppure (2) apportare le modifiche nella cartella dei pacchetti del sito dopo aver installato il pip. Quest'ultima versione non funzionerà bene se poi la spingerai su un altro server e la installerai con requirements.txt. Si noti che se si esegue l'opzione 1 con requirements.txt, si vorrà indicarlo al repository piuttosto che alla registrazione Django.

+0

Questo è esattamente quello che ho pensato troppo. Il problema è che non sto chiamando 'get_user_model()' nel mio codice al momento dell'importazione, è chiamato nella [django-registration] (https://bitbucket.org/ubernostrum/django-registration/src/8f242e35ef7c004e035e54b4bb093c32bf77c29f /registration/models.py?at=default#cl-15) applicazione. Questo significa che la registrazione di django non è compatibile con 1.7b? – Nima

+0

Yea sembra che il proprietario del repository non lo stia più mantenendo, il che è un peccato. Non sono sicuro di quale sia la soluzione corretta qui. Non penso che 'User = settings.AUTH_USER_MODEL' farebbe il lavoro poiché' settings.AUTH_USER_MODEL' restituisce una stringa e usando 'get_model()' per ottenere la classe del modello attuale non è possibile qui. – Nima

+0

Cosa succede se hai appena rimosso la parte get_user_model() e importato l'utente? Attualmente: 'try: da django.contrib.auth import get_user_model Utente = get_user_model() eccetto ImportError: da django.contrib.auth.modelli import Utente Cosa succede se si eliminano le prime quattro righe: 'da django.contrib.auth.models import User' – Alex

Problemi correlati