Невозможно создать пользовательского пользователя в django

Вот мой файл models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import UserManager,AbstractBaseUser,PermissionsMixin
# Create your models here.
class CustomUserManager(UserManager):
    def _create_user (self, email,password, **extra_fields):
        if not email:
            raise ValueError('Please provide a valid email')
        
        email= self.normalize_email(email)
        user= self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save( using= self.db )
        
        return user
    
    def create_user(self,email=None,password=None, **extra_fields):
        extra_fields.setdefault('is_staff' ,False)
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(email,password, **extra_fields)
    
    def create_superuser(self,email=None,password=None, **extra_fields):
        extra_fields.setdefault('is_staff' ,True)
        extra_fields.setdefault('is_superuser', True)
        return self._create_user(email,password, **extra_fields)

class User(AbstractBaseUser,PermissionsMixin):
    email  = models.EmailField(blank=True,default='',unique=True)
    name = models.CharField(max_length=255,blank=False,default='',unique=True)

    is_active = models.BooleanField(default=True)
    is_superuser = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    date_joined = models.DateTimeField(default=timezone.now)
    last_login = models.DateTimeField(blank=True, null=True)

    objects = CustomUserManager()
    USERNAME_FIELD = 'name'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = 'User'
        verbose_name_plural = 'Users'

    def get_full_name (self):
        return self.name
    
    def get_short_name(self):
        return self.name or self.email.split('@')[0]
        

Я пытаюсь создать пользовательскую модель пользователя в django. Я хочу, чтобы пользователь регистрировался, используя свое имя пользователя, электронную почту и пароль. Однако, когда я пытаюсь создать суперпользователя, он никогда не запрашивает email, а затем выкидывает эту ошибку:

File "C:\Users\User\Desktop\myproj\todo_app\models.py", line 8, in _create_user raise ValueError('Please provide a valid email') ValueError: Please provide a valid email

Команда createsuperuser запрашивает только REQUIRED_FIELDS Ref.

Дополняю ответ @vvxhid. Команда createsuperuser использует атрибут REQUIRED_FIELDS в модели для запроса полей, отличных от USERNAME_FIELD.

Измените это в вашей модели на

REQUIRED_FIELDS = ['email']

Вернуться на верх