2010-11-13 2 views
1

J'essaye de mettre en place un système d'authentification pour 2 différents groupes d'utilisateurs dans Django. Un étudiant (en utilisant son nom d'utilisateur & mot de passe), Un développeur (en utilisant son e-mail & mot de passe). Actuellement, j'ai un modèle UserProfile (commun) qui sera partagé par Student, Developer. Voici mon code modèles:Meilleure pratique pour suivre plusieurs backends d'authentification dans Django?

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    name = models.CharField(max_length=50, null=True, blank=True) 
    slug = models.SlugField(max_length=50, db_index=True, unique=True)#this will be used as his unique url identifier 
    objects = UserProfileManager() 

    class Meta: 
     abstract = True 

class Student(UserProfile): 
    ''' some student specific fields might go here ''' 

class Developer(UserProfile): 
    ''' some developer specific fields might go here ''' 

Et settings.py je donne:

AUTH_PROFILE_MODULE = 'users.UserProfile' 

je devenais l'authentification de travailler uniquement avec modèle UserProfile. Mais dès que j'ai présenté Student, le développeur tout foutu en l'air. Je reçois

UserProfile n'a pas d'attribut 'DoesNotExist'

(ce qui est de la méthode UserProfileManager existe) et aussi

SiteProfileNotAvailable

erreur

. (Je reçois ces erreurs avant même que j'ai commencé à écrire email backend.). Est-ce que je manque quelque chose? Quel est le meilleur chemin à suivre pour réaliser ce que je voulais.

Répondre

0

Le problème peut être la définition abstraite de UserProfile. Les choses devraient fonctionner quand vous laissez l'abstrait = Vrai. Mais soyez conscient de la façon dont cela change votre schéma de table.

+0

Si nous laissons Abstract = True, alors il créera des enregistrements UserProfile dans Db. Droite ? Je veux éviter cela. Je souhaite que les profils Student ou Developer soient créés dans les tables respectives. Je pense que la raison pour laquelle je suis allé créer deux modèles (étudiant, développeur) est, si nous avons un seul modèle UserProfile et différencier étudiant/développeur est fait par un simple drapeau, alors quelqu'un est obligé d'utiliser un seul backend auth. Droite ? Depuis que je voulais plusieurs backends auth, j'ai recouru à plusieurs types de profils d'utilisateurs (étudiant, développeur) –

Questions connexes