La classe AbstractBaseUser

Exclusif Premium

Débloquez votre potentiel ! ✨

Cette session fait partie de notre programme Premium exclusif

+100h de formations exclusives
+180 exercices de code avancés
+100h de mentorats en réécriture
20 projets guidés pas à pas
Mentorats groupés hebdomadaires
Support individuel avec nos mentors

Prêt à passer au niveau supérieur ?

Découvrez tous les avantages Premium et transformez votre apprentissage dès aujourd'hui!

Inscris-toi

(c'est gratuit !)

Un compte est nécessaire pour participer aux discussions.

Créer un compte

Toutes les questions

De716

22 février 2024

Résolue
4 réponses

user et superuser dans le même modèle

Bonjour, je souhaite dans mon application définir des utilisateurs avec email comme identifiant de connexion et des champs obligatoires nom, prenom et adresse. Dasn le même temps je ne souhaite utiliser qu'un email, nom et prenom (pas d'adresse) pour le superuser. J'ai donc différencié les fonctions `create_user` et `create_superuser`. Est-ce la bonne façon de procéder? fFaut-il lier un profil pour différencier `user` et `superuser`? D'autre part la doc Django indique qu'un champ qui a `blank=False` doit apparaitre dans `REQUIRED_FIELDS`, or je ne veux pas que ces champs me soient demandés avec la commande `manage.py createsuperuser`. J'ai donc essayé sans inclure le champ `adresse` et cela semble fonctionner quand même. Voici les modèles CustomManager et CustomUser que j'ai créé, avec les champs obligatoire qui ont `blank=False`: ``` class CustomManager(BaseUserManager): # on crée un manager qui va gérer notre modèle Visiteur customisé def create_user(self, email='', nom='', prenom='', adresse='', password=None): if not email: raise ValueError("Vous devez entrer un email.") # On utilise l'attribut 'model' du manager. Cet attribut fait référence au modèle géré par le manager (CustomUser) user = self.model( email=self.normalize_email(email), nom=nom, prenom=prenom, adresse=adresse, ) user.set_password(password) user.save() return user def create_superuser(self, email, nom='', prenom='', password=None): if not email: raise ValueError("Vous devez entrer un email.") # On utilise l'attribut 'model' du manager. Cet attribut fait référence au modèle géré par le manager (CustomUser) user = self.model( email=self.normalize_email(email), nom=nom, prenom=prenom ) user.set_password(password) # user = self.create_user(email=email, nom=nom, prenom=prenom, password=password) user.is_admin = True user.is_staff = True user.save() return user class CustomUser(AbstractBaseUser): nom = models.CharField(max_length=150, blank=False) prenom = models.CharField(max_length=150, blank=False) adresse = models.CharField(max_length=150, blank=False) email = models.EmailField(max_length=150, unique=True, blank=False) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) is_admin = models.BooleanField(default=False) USERNAME_FIELD = "email" # on indique le champ qui servira d'id de connexion REQUIRED_FIELDS = ["nom", "prenom"] # on n'inclut pas le champ qui sert de 'username' objects = CustomManager() def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True ``` Merci pour votre aide. Ali

Ce n'est pas fini...

Tu as complété % du parcours 🔥

Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.

Rechercher sur le site

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.