J'ai une situation où je dois sous-classe un modèle utilisateur personnalisé pour un django 1.5 projet (question/fond lié ici: Subclassing AbstractUser in Django for two types of users)Choisir la bonne méthode d'héritage de l'utilisateur pour django 1,5
je besoin d'une classe abstraite utilisateur SchoolPerson
et un certain nombre de sous-classes (Student
, Teacher
, etc.) basées sur ceci. Je pense que j'ai résolu que j'ai besoin d'avoir le modèle d'utilisateur dans une table DB distincte pour les sous-classes car d'autres applications s'appuient sur AUTH_USER_MODEL, dont il ne peut y en avoir qu'un seul.
Ainsi, la façon dont je le vois, je dois les options pour ce faire: ajouter un à un au modèle utilisateur standard dans mon résumé SchoolPerson
classe:
class SchoolPerson(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
...
class Meta:
abstract = True
class Student(SchoolPerson):
year_level = models.CharField(max_length=3)
...
class Teacher(SchoolPerson):
govt_id = models.CharField(max_length=10)
...
Ou je peux faire mon SchoolPerson
modèle hériter de AbstractUser, mais garder cette classe non-abstraite:
class SchoolPerson(AbstractUser):
...
#no Meta abstract here
class Student(SchoolPerson):
year_level = models.CharField(max_length=3)
...
class Teacher(SchoolPerson):
govt_id = models.CharField(max_length=10)
...
Y a-t-il des avantages à l'un par rapport à l'autre?
peut-être vous pouvez réaliser la même chose avec une seule classe d'utilisateur et le système d'autorisation de django: https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization – Alp
@Alp - my les différents modèles d'utilisateurs ont des champs/propriétés différents, donc je ne peux pas vraiment le faire (j'ai édité la question pour clarifier cela) – askvictor