Невозможно войти в панель администратора Django после внедрения пользовательской модели пользователя
Я выполнил настройку модели User, но не могу войти в панель администратора с созданной учетной записью суперпользователя. Что может быть причиной этой проблемы и как я могу ее решить? Любая помощь или совет будут очень признательны.
users/user.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from ..managers.user import UserManager
class User(AbstractUser):
objects = UserManager()
manager/user.py
from django.contrib.auth.models import BaseUserManager
class UserManager(BaseUserManager):
def create_superuser(self, username, email=None, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(username, email, password, **extra_fields)
def create_user(self, email, username=None, password=None, **extra_fields):
if not username:
raise ValueError('The username field must set')
email = self.normalize_email(email)
user = self.model(username=username, email=email, **extra_fields)
user.set_password(password)
user.save(using=self.db)
return user
user/serializer.py
from django.contrib.auth import get_user_model
from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers # type: ignore # noqa: I201
User = get_user_model()
class UserReadSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
class UserWriteSerializer(serializers.ModelSerializer):
password = serializers.CharField(validators=[validate_password], write_only=True)
class Meta:
model = User
fields = ('password', 'username')
def create(self, validated_data):
password = validated_data.pop('password')
username = validated_data.get('username')
user = User.objects.create_user(username=username, password=password)
return user
settings/base.py
settings/rest_framework.py
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=365),
'REFRESH_TOKEN_LIFETIME': timedelta(days=30),
'UPDATE_LAST_LOGIN': True,
}
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_simplejwt.authentication.JWTAuthentication',),
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
'rest_framework.filters.OrderingFilter',
],
'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser',),
'TEST_REQUEST_DEFAULT_FORMAT': 'json',
}
Окружение Django 3.2 Python 3.9 PostgreSQL Docker (для разработки)
Проблема может быть здесь, пробовали ли вы войти в систему с электронной почтой в качестве имени пользователя
return self.create_user(username, email, password, **extra_fields)
def create_user(self, email, username=None, password=None, **extra_fields):
как следует из приведенного выше кода, вы меняете местами поля username и email при вызове метода self.create_user. soln:
return self.create_user(email, username, password, **extra_fields)
def create_user(self, email, username=None, password=None, **extra_fields):