Могут ли пользователи и суперпользователи иметь один и тот же адрес электронной почты / имя пользователя в приложении Django?
У меня есть CustomUser класс для моих пользователей, который выглядит следующим образом.
class CustomUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=150, unique=True, null=True, blank=True)
email = models.EmailField(max_length=240, unique=True)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = CustomUserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email', 'password']
class Meta:
verbose_name = 'user'
Это работает практически так, как ожидалось, я могу зарегистрироваться, как обычные пользователи. Проблема возникает, когда я пытаюсь создать суперпользователя с тем же адресом электронной почты / именем пользователя. Я сталкиваюсь со следующей ошибкой,django.db.utils.IntegrityError duplicate key value violates unique constraint "accounts_customuser_email_key".
Я понимаю, что существует ограничение на уникальность полей имени пользователя и электронной почты, но разве пользователь не должен иметь возможность создать учетную запись пользователя и администратора с одинаковыми учетными данными в идеале?
У меня есть пользователь со следующими именем пользователя и адресом электронной почты. username: test_user email:test_user@test.com Я решил создать администратора с таким же именем пользователя и адресом электронной почты. Это приводит к нарушению уникального ограничения. Я ожидал, что Django сам справится с этим.
У пользователей и суперпользователей не может быть одинакового адреса электронной почты или имени пользователя, поскольку в вашей пользовательской модели они являются просто пользователями. Суперпользователи - это просто пользователи с установленным флагом is_superuser=True. Все пользователи, независимо от их разрешений (is_staff, is_superuser и т.д.), хранятся в одной таблице базы данных.
Ваше имя пользователя и адрес электронной почты уникальны, поэтому у вас не может быть двух учетных записей - обычной и суперпользовательской - с одинаковым значением.
Если вы хотите назначить пользователя администратором, все, что вам нужно сделать, это установить для атрибута is_staff этого пользователя значение True.
Таким образом, администраторы и суперпользователи - это пользователи в одной таблице, для атрибутов is_staff и is_superuser установлено значение True. Также обратите внимание, что для всех суперпользователей значение is_staff равно True.