2013-02-27 10 views
14

Mam pytanie dotyczące niestandardowego modelu użytkownika w Django 1.5Kiedy używać niestandardowy model użytkownika w Django 1.5

Więc teraz domyślnym modelu użytkownika wygląda dobrze do mnie, wystarczy dodać kilka innych zmienne, takie jak płeć, lokalizacja i urodziny, aby użytkownicy mogli wypełnić te zmienne po pomyślnym zarejestrowaniu i aktywacji konta.

Jaki jest najlepszy sposób wdrożenia tego scenariusza?

Czy muszę utworzyć nową aplikację o nazwie Profil i dziedziczyć AbstractBaseUser? i dodać moją niestandardową zmienną do modelu .ps? Czy mam dobry przykład do naśladowania?

góry dziękuję

+0

Jeśli nie worring o optymalizacji bazy danych można utworzyć dodatkowe modelu profil i zrobić jeden-do-jednego relacji do modelu użytkownika z django.contrib.auth.models. Zmiany w Django 1.5 umożliwiają tworzenie niestandardowego modelu użytkownika, w tym przypadku model odpowiada 1 tabeli bazy danych. Nie jest konieczne tworzenie specjalnej oddzielnej aplikacji, możesz dodać model do typowego modelu .s.py. Ale jeśli chcesz, możesz. – sergzach

Odpowiedz

27

chcesz przedłużyć swój model użytkownika do AbstractUser i dodać dodatkowe pola. AbstractUser dziedziczy wszystkie standardowe pola profilu użytkownika, natomiast AbstractBaseUser rozpoczyna od podstaw bez żadnego z tych pól.

Trudno jest zdefiniować najlepsze praktyki tak blisko wydania, ale wydaje się, że jeśli nie musisz drastycznie przedefiniować modelu użytkownika, to powinieneś użyć AbstractUser, gdzie to możliwe.

Here are the docs for extending the User model using AbstractUser

Twój models.py będzie wtedy wyglądać tak:

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

MyUser będzie wtedy mieć standardowy e-mail, hasło, nazwa użytkownika itp pola, które pochodzą z modelu użytkownika, a swoje trzy dodatkowe pola powyżej.

Następnie trzeba dodać AUTH_USER_MODEL aby Twój settings.py:

AUTH_USER_MODEL = 'myapp.MyUser'

+1

Dobra odpowiedź, nie obejrzałem jeszcze nowej metody - pinboarded. :-) – Matt

+1

Dzięki Mr.Hoerst za wspaniałą i pouczającą odpowiedź. :) – Iqbal

+0

podczas tworzenia użytkownika mam ten błąd: 'Menedżer nie jest dostępny; Użytkownik został zamieniony na "myapp.MyUser'' – suhailvs