Как расширить пользовательскую модель Django

#python #python-3.x #django #django-models

#python #python-3.x #django #django-модели

Вопрос:

Я знаю, что есть способ расширить пользовательскую модель в Django вместе с ее приложением аутентификации. Есть ли способ использовать адрес электронной почты в качестве имени пользователя, а также создать идентификатор пользователя в качестве первичного ключа?

Комментарии:

1. На самом деле это задокументировано в расширении существующей модели пользователя или замене пользовательской модели пользователя и компромиссах между этими вариантами.

Ответ №1:

Как уже говорил Кросби, вы должны написать свою модель таким образом, добавив что-то дополнительное:

 class User(AbstractUser):
    user_id = models.IntegerField(primary_key=True, ...)
    email = models.EmailField(unique=True)

    USERNAME_FIELD = 'email'
  

Переопределение поля электронной почты и превращение его в уникальное поле избавит вас от необходимости кодирования в view или где-либо еще, чтобы не допускать дублирования электронных писем.

Комментарии:

1. Будет ли это расширять существующую пользовательскую модель?

2. Спасибо, это было действительно полезно!

Ответ №2:

Да, установите USERNAME_FIELD значение email.

По умолчанию вы уже можете использовать pk поле (или id ) в качестве идентификатора пользователя. Если вам нужно что-то конкретное, создайте поле с primary_key=True помощью .

 class User(AbstractUser):
    your_own_identifier = models.IntegerField(primary_key=True, ...)


    USERNAME_FIELD = 'email'

  

Комментарии:

1. Я попробовал это сейчас, и это работает так, как вы сказали, спасибо!