Partage
  • Partager sur Facebook
  • Partager sur Twitter

Django : Connexion à la console d'admin. impossibl

Impossible de se connecter à la console d'admin. avec un Custom User

    1 octobre 2022 à 13:54:59

    Bonjour,

    J'ai créé un model d'utilisateur personnalisé dans Django. J'ai ensuite créé un super user à partir de manage.py ("py manage.py createsuperuser") mais j'ai un problème : celui-ci n'est pas autorisé à se connecter à la console d'administration. Il est pourtant toutes les grades possibles. 

    Voici mon code : 

    from django.db import models
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
    from django.contrib.auth.models import User
    
    class MyUserManager(BaseUserManager):
        def create_user(self, username, email, password=None):
            if not email:
                raise ValueError('Vous devez entrer un email.')
            if not username:
                raise ValueError("Vous devez entrer un nom d'utilisateur.")
    
            user = self.model(email=self.normalize_email(email), username=username)
            user.set_password(password)
            user.save()
            return user
    
        def create_superuser(self, username, email, password=None):
            user = self.create_user(username=username, email=email, password=None)
            user.is_admin = True
            user.is_staff = True
            user.is_superuser = True
            user.save()
            return user
    
    class CustomUser(AbstractBaseUser):
        username = models.CharField(max_length=12, primary_key=True, unique=True)
        id = models.IntegerField(default=1)
        email = models.EmailField(max_length=255, blank=False, unique=True)
        is_active = models.BooleanField(default=True)
        is_staff = models.BooleanField(default=False)
        is_admin = models.BooleanField(default=False)
        is_superuser = models.BooleanField(default=False)
    
        USERNAME_FIELD = "username"
        REQUIRED_FIELDS = ['email']     # Pour que cela soit demandé par la commande 'createsuperuser'
        objects = MyUserManager()

    Merci d'avance de vos réponses.

    • Partager sur Facebook
    • Partager sur Twitter
      2 octobre 2022 à 9:10:08

      is_staff : Renvoie True si l’utilisateur est autorisé à accéder au site d’administration

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        3 octobre 2022 à 11:35:19

        tu as mis à jour le model avec un makemigrations et migrate ?
        • Partager sur Facebook
        • Partager sur Twitter
          3 octobre 2022 à 23:24:25

          Sakisaac Jonathan a écrit:

          Bonjour,

          J'ai créé un model d'utilisateur personnalisé dans Django. J'ai ensuite créé un super user à partir de manage.py ("py manage.py createsuperuser") mais j'ai un problème : celui-ci n'est pas autorisé à se connecter à la console d'administration. Il est pourtant toutes les grades possibles. 

          Voici mon code : 

          from django.db import models
          from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
          from django.contrib.auth.models import User
          
          class MyUserManager(BaseUserManager):
              def create_user(self, username, email, password=None):
                  if not email:
                      raise ValueError('Vous devez entrer un email.')
                  if not username:
                      raise ValueError("Vous devez entrer un nom d'utilisateur.")
          
                  user = self.model(email=self.normalize_email(email), username=username)
                  user.set_password(password)
                  user.save()
                  return user
          
              def create_superuser(self, username, email, password=None):
                  user = self.create_user(username=username, email=email, password=None)
                  user.is_admin = True
                  user.is_staff = True
                  user.is_superuser = True
                  user.save()
                  return user
          
          class CustomUser(AbstractBaseUser):
              username = models.CharField(max_length=12, primary_key=True, unique=True)
              id = models.IntegerField(default=1)
              email = models.EmailField(max_length=255, blank=False, unique=True)
              is_active = models.BooleanField(default=True)
              is_staff = models.BooleanField(default=False)
              is_admin = models.BooleanField(default=False)
              is_superuser = models.BooleanField(default=False)
          
              USERNAME_FIELD = "username"
              REQUIRED_FIELDS = ['email']     # Pour que cela soit demandé par la commande 'createsuperuser'
              objects = MyUserManager()

          Merci d'avance de vos réponses.

          Bonsoir, est-ce que tu peux nous faire voir le traceback ? Je ne comprends pas trop l'intérêt du champ id.

          • Partager sur Facebook
          • Partager sur Twitter
            4 octobre 2022 à 21:28:43

            Bonjour

            J'ai finalement trouvé la solution à mon problème : à la ligne 17, il fallait mettre password=password 

            def create_superuser(self, username, email, password=None): # ligne problématique
            
            def create_superuser(self, username, email, password=passsword): # Corrigé

            Merci à tous pour vos réponses.


            Franck_popo a écrit:

            Sakisaac Jonathan a écrit:

            Bonjour,

            J'ai créé un model d'utilisateur personnalisé dans Django. J'ai ensuite créé un super user à partir de manage.py ("py manage.py createsuperuser") mais j'ai un problème : celui-ci n'est pas autorisé à se connecter à la console d'administration. Il est pourtant toutes les grades possibles. 

            Voici mon code : 

            # CODE

            Merci d'avance de vos réponses.

            Bonsoir, est-ce que tu peux nous faire voir le traceback ? Je ne comprends pas trop l'intérêt du champ id.

            Bonsoir,

            J'ai mis le champs 'name' en pk (Primary Key) mais je voulais quand même avec le champs ID. Le souci étant que le champs ID généré par Django est disponible UNIQUEMENT s'il est en Primary Key. J'ai donc créé mon propre champs ID avec une fonction qui permet d'imiter celui généré par Django. La fonction est la suivante : 

                def save(self, *args, **kwargs):
                    
                    if self._state.adding:
                        last_id = Team.objects.all().aggregate(Max('id')).get('id__max')
                        if last_id is not None:
                            self.id = last_id + 1

            J'ai donc un champs ID, identique à celui généré par Django, qui n'est pas utilisé comme Primary Key.



            -
            Edité par Sakisaac Jonathan 4 octobre 2022 à 22:46:31

            • Partager sur Facebook
            • Partager sur Twitter

            Django : Connexion à la console d'admin. impossibl

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown