2009-03-24 7 views
6

Dans ma demande, j'ai des étudiants, des professeurs et du personnel. Les membres du personnel n'ont pas besoin d'un profil, mais les professeurs et les étudiants ont besoin d'un profil différent. Je préférerais ne pas l'implémenter moi-même (middleware et autres), donc y at-il de toute façon que get_profile() retourne un profil différent en fonction du rôle d'un utilisateur?Quelle est la meilleure façon d'avoir différents profils pour différents types d'utilisateurs dans django?

Répondre

7

Avec Django 1.1, qui est actuellement en version bêta, j'implémenterais un proxy model.

class MyUser(User): 

    class Meta: 
    proxy = True 

    def get_profile(self): 
    if self.role == 'professor': 
     return ProfessorProfile._default_manager.get(user_id__exakt=self.id) 
    elif self.role == 'student': 
     return StudentProfile._default_manager.get(user_id__exakt=self.id) 
    else: 
     # staff 
     return None 

get_profile a besoin du code de mise en cache de l'original et ainsi de suite. Mais essentiellement, vous pourriez faire quelque chose comme ça. Avec Django 1.0.x, vous pouvez implémenter des classes dérivées basées sur l'utilisateur, mais cela peut casser le code à d'autres endroits.

Pour ce genre de choses, j'adore les classes proxy, qui ajoutent simplement la fonctionnalité python sans changer les modèles de base de données.

+0

Cela a l'air utile mais cela pose exactement le même problème que j'ai avec ma propre utilisation de plusieurs types d'utilisateurs/profils: les applications existantes ne le savent pas. Ils créent simplement des instances d'utilisateurs, donc cette méthode sympa est complètement ignorée. – ironfroggy

+0

Oui, les modèles d'utilisateurs multiples sont encore un peu problématiques, mais les différents profils basés sur les rôles peuvent être résolus. –

0

Avez-vous rad http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles?

C'est la solution standard.

+2

J'ai lu ça. Ce dont j'ai besoin, c'est de différents types de profils pour différents types d'utilisateurs, cette solution ne donnera qu'un type de profil pour tous les utilisateurs. –

+0

Veuillez mettre à jour votre question avec un exemple de «différents types de profils». Habituellement, nous définissons des profils avec plusieurs champs, dont certains sont facultatifs. Qu'est-ce que tu racontes? –

Questions connexes