Résolue

Interface administration Django

# Résolution d'erreurs # Bases de données # 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/

None

C'est bon j'ai trouvé où j'ai fait l'erreur ! Merci du coup de main

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

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