2013-02-27 2 views
14

Ich habe eine Frage in Bezug auf die individuelle Benutzermodell in Django 1.5Wenn die benutzerdefinierten Benutzer Modell in Django verwenden 1.5

So jetzt die Standard-Benutzermodell für mich ganz gut aussieht, ich brauche nur ein paar andere hinzufügen Variablen wie Geschlecht, Standort und Geburtstag, damit Benutzer diese Variablen nach erfolgreicher Registrierung und Aktivierung ihres Kontos füllen können.

Also, was ist der beste Weg, um dieses Szenario zu implementieren?

Muss ich eine neue App mit dem Namen Profil erstellen und AbstractBaseUser erben? und füge meine benutzerdefinierte Variable zu models.py hinzu? Ein gutes Beispiel für mich zu folgen?

danken Ihnen im Voraus

+0

Wenn Sie nicht über die Datenbankoptimierung worring können Sie zusätzliches Profilmodell erstellen und eine Eins-zu-Eins-Beziehung mit dem User-Modell machen aus django.contrib.auth.models. Mit den Änderungen in Django 1.5 können Sie ein benutzerdefiniertes Benutzermodell erstellen. In diesem Fall entspricht das Modell einer Datenbanktabelle. Es ist nicht erforderlich, eine spezielle separate Anwendung zu erstellen. Sie können das Modell zu einigen gängigen models.py hinzufügen. Aber wenn du willst, kannst du es. – sergzach

Antwort

27

Sie wollen Ihren Benutzermodell zum AbstractUser und fügen Sie Ihre zusätzliche Felder erweitern. AbstractUser erbt alle Standardbenutzerprofilfelder, während AbstractBaseUser Sie von Grund auf neu ohne diese Felder startet.

Es ist schwierig, Best Practices so kurz vor der Veröffentlichung zu definieren, aber wenn Sie das Benutzermodell nicht drastisch neu definieren müssen, sollten Sie möglichst AbstractUser verwenden.

Here are the docs for extending the User model using AbstractUser

Ihr models.py würde dann wie folgt aussehen:

class MyUser(AbstractUser): 
    gender = models.DateField() 
    location = models.CharField() 
    birthday = models.CharField() 

MyUser haben dann den Standard-E-Mail, Passwort, Benutzername, etc Felder, die mit dem User-Modell kommen, und Ihre drei weiteren Felder oben.

Dann müssen Sie fügen die AUTH_USER_MODEL zu Ihrem settings.py:

AUTH_USER_MODEL = 'myapp.MyUser'

+1

Schöne Antwort, habe die neue Methode noch nicht verstanden - pinnwandartig. :-) – Matt

+1

Danke Mr.Hoerst für die tolle und informative Antwort. :) – Iqbal

+0

während ich einen Benutzer erstelle, habe ich diesen Fehler: 'Manager ist nicht verfügbar; Benutzer wurde gegen 'myapp.MyUser'' – suhailvs