Невозможно войти в панель администратора Django с пользовательским пользователем

Я создал пользовательскую модель пользователя, показанную ниже:

from django.db import models
from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser, PermissionsMixin
)

class UserManager(BaseUserManager):
    def create_user(self, username, password=None):
        user = self.model(username)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, username, password, **kwargs):
        user = self.create_user(username,password=password)
        user.is_admin = True
        user.is_staff = True
        user.save(using=self._db)

        return user


class tgUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(primary_key=True, max_length=50)
    id = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    photo_url = models.CharField(max_length=200)                                
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 

    objects = UserManager()

    USERNAME_FIELD = "username"

    def __str__(self):
        return f"{self.first_name} ({self.last_name})"

В файле settings.py я указал:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

SITE_ID = 1
AUTH_USER_MODEL = "table.TgUser" 
ACCOUNT_EMAIL_REQUIRED = False
# ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = "username"

Однако в панели администратора по-прежнему отображается сообщение "Please enter the correct username and password for a staff account. Обратите внимание, что оба поля могут быть чувствительны к регистру." при входе.

Как я могу решить эту проблему?

Я думаю, что проблема была в **kwargs. Вы всегда должны включать их. Ниже приведена рабочая реализация.

class UserManager(BaseUserManager):
    def create_superuser(self, username, password, **other_fields):

        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', 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_superuser') is not True:
            raise ValueError(
                'Superuser must be assigned to is_superuser=True.')

        return self.create_user(username, password, **other_fields)

    def create_user(self, username, password, **other_fields):

        user = self.model(username=username, **other_fields)
        user.set_password(password)
        user.save()
        return user
Вернуться на верх