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()
is_staff : Renvoie True si l’utilisateur est autorisé à accéder au site d’administration
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)
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.
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
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.
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)