3

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?

+0

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

+0

@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

Répondre

0

Je n'ai pas testé cela mais ce que j'attends est pour votre première suggestion de créer deux tables de db: un pour étudiant et un pour professeur chacun avec une clé étrangère à AUTH_USER_MODEL. Pour le second, je m'attends à ce que Django crée trois tables db: Une pour le SchoolPerson (qui sera exact comme la table des utilisateurs par défaut avec les champs supplémentaires) et deux pour Student et Teacher avec des clés étrangères à SchoolPerson.

Donc, je pense que la réponse dépend de vos besoins.

Questions connexes