2013-03-27 10 views
9

Ich versuche, das E-Mail-Feld im Standard-Django-Benutzermodell als Benutzername zu verwenden. Ich benutze Django 1.5 und ich sah, dass der Standardbenutzer eine USERNAME_FIELD Eigenschaft hat. In meinem Projekt möchte ich folgendes USERNAME_FIELD = 'email' als Standard im Benutzermodell festlegenKann ich das USERNAME_FIELD in Django 1.5 ändern, ohne einen benutzerdefinierten Benutzer zu erstellen?

Diese kleine aber grundlegende Optimierung ist die einzige Sache, die ich im Benutzermodell ändern möchte. Ich habe mich gefragt, ob es eine Möglichkeit gibt, die USERNAME_FIELD zu ändern, ohne den AbstractUser zu unterklassen. Ich sah in this question, dass Sie die AbstractUser Unterklasse erstellen und einen benutzerdefinierten Manager dafür schreiben können.

Also fragte ich mich, ob es eine einfachere Möglichkeit gibt, diese Eigenschaft zu ändern?

Und wenn nicht, was wäre die minimale Art und Weise der Erweiterung der AbstractUser, um das E-Mail-Feld als Benutzername zu verwenden?

+0

Verwendung AbstraceBaseUser statt – catherine

+0

@catherine Wenn Sie Subclass AbstractUser Manager entfernen Sie diese Probleme am Ende: http: //stackoverflow.com/questions/16605453/django-1-5-extend- the-default-user-model-or-substitute-it und http://stackoverflow.com/questions/16601412/upgrading-django-to-1-5-with-django-cms-user-model-issue – Daviddd

Antwort

4
#Your app's __init__.py 

from django.contrib.auth.models import User 

User.USERNAME_FIELD = 'email' 
+6

Dies wirft auf der Fehler "django.core.management.base.CommandError: Ein oder mehrere Modelle haben nicht validiert: auth.user: Das Feld namens USERNAME_FIELD sollte nicht in REQUIRED_FIELDS für ein austauschbares Benutzermodell enthalten sein. auth.user: The USERNAME_FIELD muss eindeutig sein. Fügen Sie den Feldparametern unique = True hinzu. " für mich. – Martey

+0

Das gleiche Problem mit mir ... Ich frage mich, ob es irgendwelche Änderungen gab, die das zwischen März 13 und Mai 13 oder so brechen. Ich hätte wirklich gerne, dass das funktioniert. – user1496984

1

Sie haben eine neue benutzerdefinierte Benutzerklassen zu schreiben, indem die AbstractBaseUser erstreckt und nicht AbstractUser

Erklären Sie Ihre E-Mail als USERNAME_FIELD dort

Optional können Sie auch eine benutzerdefinierte Benutzer-Manager erklären, die aus erstreckt BaseUserManager zur Verarbeitung der Username-Einschränkung. Sie können Benutzernamen aus diesem create_user Funktion