Interface administration Django
Bonjour, j'ai fait un Custom User dans models.py et un Custom Admin dans le fichier admin.py. J'ai lancé mon serveur et tout va bien j'ai la section User Manager dans mon interface admin mais le bouton "Ajouter" un nouvel utilisateur ne fonctionne pas. Il m'envoie le message d'erreur suivant:
TypeError at /admin/libraryapp/usermanager/add/
cannot unpack non-iterable NoneType object
Comment procède-t-on pour ajouter un nouvel utilsateur (qui fait parti du staff mais qui n'est pas admin par exemple) à partir de l'interface admin ?
Est ce qu'il y'a une méthode à ajouter dans la class UserAdminConfig ?
Mon fichier admin.py :
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.forms import Textarea
from django.db import models
# Register your models here.
from .models import UserManager
class UserAdminConfig(UserAdmin):
model = UserManager
search_fields = ('email', 'user_name')
list_filter = ('email', 'user_name', 'is_staff', 'is_admin', 'is_active')
ordering = ('registration_date',)
list_display = ('email', 'user_name', 'is_staff', 'is_admin', 'is_active')
fieldsets = (
(None, {'fields': ('email', 'user_name')}),
('Permissions', {'fields': ('is_staff', 'is_admin', 'is_active')}),
)
formfield_overrides = {
models.TextField: {'widget': Textarea(attrs={'rows': 20, 'cols': 20})},
}
add_fieldsets = (
(None, {
'classes': ('widget',),
'fields': ('email', 'user_name', 'password1', 'password2', 'is_staff', 'is_admin', 'is_active')
})
)
admin.site.register(UserManager, UserAdminConfig)
Mon Fichier models.py :
from django.db.models import CharField, EmailField, DateTimeField
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
# Create your models here.
class CustomUserManager(BaseUserManager):
def create_user(self, email, user_name, password=None, **other_fields):
if not email:
raise ValueError('You must provide an email adress')
email = self.normalize_email(email)
user = self.model(email=email, user_name=user_name, **other_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, user_name, password=None, **other_fields):
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_admin', True)
other_fields.setdefault('is_active', True)
if other_fields.get('is_staff') is not True:
raise ValueError('Superuser must be assigned to is_staff=True.')
if other_fields.get('is_admin') is not True:
raise ValueError('Superuser must be assigned to is_admin=True.')
user = self.create_user(email=email, user_name=user_name, password=password, **other_fields)
user.save()
return user
class UserManager(AbstractBaseUser, PermissionsMixin):
email: EmailField = models.EmailField(unique=True, max_length=255)
user_name: CharField = models.CharField(unique=True, max_length=150)
registration_date: DateTimeField = models.DateTimeField("Registration Date", auto_now_add=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects: CustomUserManager = CustomUserManager()
USERNAME_FIELD: str = "email"
REQUIRED_FIELDS = ['user_name']
def __str__(self):
return f"{self.email} {self.user_name} {self.registration_date} {self.is_staff} {self.is_admin} {self.is_active}"
def has_perm(self, perm, obj=None):
"""Does the user have a specific permission?"""
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"""Does the user have permissions to view the app `app_label`?"""
# Simplest possible answer: Yes, always
return True
Bonjour. Tu as modifier setting.py ? Au niveau de AUTH_USER_MODEL pour que Django sache que tu lui demande de prendre ton model. Je pense que c est ca ton soucis. Vérifie avec la doc.
Oui je l'ai fait. J'ai mis mon model UserManager.
Je regarde cette source pour gérer les utilisateurs dans django admin: https://realpython.com/manage-users-in-django-admin/
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte