Создание пользовательской модели пользователя в 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 в базе данных.