Могут ли пользователи и суперпользователи иметь один и тот же адрес электронной почты / имя пользователя в приложении 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.

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