Создание пользовательской модели пользователя в django с помощью AbstractBaseUser

Я пытаюсь создать пользовательскую модель пользователя, когда я запускаю python manage.py createsuperuser, он предлагает ввести имя пользователя, затем пароль, и подтвердить пароль, когда я нажимаю enter после этого я получаю эту ошибку

django.db.utils.IntegrityError: UNIQUE constraint failed: accounts_user.email

model.py :

class UserManager(BaseUserManager):
    def _create_user(self, username, password=None, **extra_fields):
        if not username:
            raise ValueError("User must have a username")
        if not username:
            raise ValueError("User must have a password")
        user = self.model(
            username=username
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, username, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_admin', False)
        return self._create_user(username, password, **extra_fields)

    def create_superuser(self, username, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_admin', True)
        return self._create_user(username, password, **extra_fields)


class User(AbstractBaseUser):
    username = models.CharField(max_length=255, unique=True)
    email = models.EmailField(max_length=255, unique=True)
    active = models.BooleanField(default=True)
    admin = models.BooleanField(default=False)
    staff = models.BooleanField(default=False)
    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = []

    objects = UserManager()

    def __str__(self):
        return self.username

весь журнал ошибок:

согласно документам:

ОБЯЗАТЕЛЬНЫЕ_ПОЛЯ

Список названий полей, которые будут запрашиваться при создании пользователя с помощью команды управления createsuperuser. Пользователю будет будет предложено ввести значение для каждого из этих полей. Оно должно включать любое поле, для которого пустое значение равно False или неопределено, и может включать дополнительные поля, которые необходимо ввести при создании пользователя интерактивно. REQUIRED_FIELDS не имеет никакого эффекта в других частях Django, например, при создании пользователя в админке

.

поэтому ваше REQUIRED_FIELDS должно быть ['email']

Примечание

.

REQUIRED_FIELDS должен содержать все обязательные поля вашей модели пользователя, но не должны содержать USERNAME_FIELD или пароль, так как эти поля всегда будут запрашиваться

UNIQUE constraint failed является ошибкой SQL и означает, что такое же значение уже существует в столбце, то есть у вас уже есть пользователь с таким email в базе данных.

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