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
erreurSiteProfileNotAvailable
. (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.
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) –