2014-04-13 15 views
11

Ich habe [Django-Registrierung] (https://bitbucket.org/ubernostrum/django-registration) verwendet und jetzt habe ich begonnen, mit Django 1.7b1 und hier ist der Fehler Ich bekomme den Fehler kopiert unten. Es wird von django-Registrierung in models.py angehoben:Django-Registrierung Kompatibilitätsproblem mit 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 

und es scheint, es erhöht wird, weil get_user_model() genannt wird, bevor die App Registrierung bereit ist. Ich bin mir nicht sicher, ob dies ein Kompatibilitätsproblem ist oder nicht, wenn ja, gibt es dafür einen einfachen Workaround? und wenn nicht, kannst du mir helfen zu erkennen, was ich falsch mache?

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.") 

Antwort

25

Verwenden Sie nicht die von PyPI verfügbare Django-Registrierung. Es unterstützt Django 1.7 nicht und es scheint, dass es nie wird. Der Repo-Verwalter ist abgedankt und das Projekt wird nicht mehr gepflegt.

Es ist eine Wartungs Gabel auf Github, die gut für mich mit Django 1.7 gearbeitet hat:

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

Es ist erhältlich von PyPI als django-registration-redux.

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

können Sie installieren pip mit:

pip install django-registration-redux

+0

Sie Sir - und Github Benutzer Macropin - rettete mich. –

+1

Es ist am pip: Pip installieren Django-Registrierung-Redux –

+1

Danke für den Tipp @VisgeeSkeloru. Ich habe die Antwort aktualisiert, um den viel einfacheren Installationsvorgang widerzuspiegeln. – ptevans

2

This note adressiert Ihr Problem.

Ich denke, die bevorzugte Art und Weise Benutzer zu importieren ist:

from django.conf import settings 
User = settings.AUTH_USER_MODEL 

EDIT:

Sieht aus wie dieses Problem admin schwierig, aber das Projekt festgestellt worden ist, wird über die Änderung. link. Dies ist ein größeres Problem mit den Updates in Django 1.7.

Ich würde sagen, Sie könnten entweder: (1) das Repo auslagern und die Änderung selbst vornehmen, oder (2) die Änderungen in Ihrem Site-Packages-Ordner nach der Pip-Installation vornehmen. Die letztere Version wird nicht so gut funktionieren, wenn Sie sie dann auf einen anderen Server schieben und mit requirements.txt installieren. Beachten Sie, dass Sie, wenn Sie die Option 1 mit der Datei requirements.txt ausführen, lieber auf Ihren Repo als auf die Django-Registrierung verweisen.

+0

Das ist genau das, was auch ich dachte. Das Problem ist, dass ich 'get_user_model()' nicht zum Importzeitpunkt in meinem Code anrufe, sondern in der [django-registration] (https://bitbucket.org/ubernostrum/django-registration/src/8f242e35ef7c004e035e54b4bb093c32bf77c29f) aufgerufen wird /registration/models.py?at=default#cl-15) -Anwendung. Bedeutet das, dass die Django-Registrierung nicht mit 1.7b kompatibel ist? – Nima

+0

Ja, es scheint, als würde der Repo-Besitzer es nicht mehr pflegen, was eine Schande ist. Ich bin mir nicht sicher, was hier die richtige Lösung ist. Ich denke nicht, dass 'User = settings.AUTH_USER_MODEL' den Job machen würde, da' settings.AUTH_USER_MODEL' einen String zurückgibt und 'get_model() 'benutzt, um die eigentliche Model-Klasse zu bekommen, ist hier nicht möglich. – Nima

+0

Was passiert, wenn Sie nur den Teil get_user_model() entfernt und den Benutzer importiert haben? Derzeit sieht wie folgt aus: 'versuchen: von django.contrib.auth Import get_user_model User = get_user_model() außer Import: von django.contrib.auth.models import User ' Was passiert, wenn Sie die ersten vier Zeilen löschen: 'von django.contrib.auth.models importieren Benutzer' – Alex

Verwandte Themen