Как и многие другие, я пытаюсь настроить приложение Django для использования электронной почты в качестве поля имени пользователя. У меня есть некоторые существующие учетные записи пользователей, которые я мигрировали к пользовательской модели пользователя успешно, хотя сейчас обычай модель идентична модели пользователя Django:Django: расширяет приложение AbstractBaseUser, чтобы использовать электронную почту как USERNAME_FIELD?
# accounts/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
В любое время я пытаюсь установить USERNAME_FIELD
в email
, я получаю что USERNAME_FIELD
не может быть включен в REQUIRED_FIELDS
, а также ошибка, которая должна быть уникальной. (примечание стороны: электронная почта не требуется для пользователя базы, поэтому я не понимаю первую ошибку)
Есть ли способ получить эту функциональность при подклассификации AbstractUser?
Или мне просто нужно подкласса AbstractBaseUser
и указать все поля, в порядке example?
Если это последний, как бы я хотел убедиться, что я определяю те же самые поля, что и модель Django User? Я не хочу потерять пользователей, которых у меня есть, или вызвать проблемы с несогласованными полями.
Кажется глупым, чтобы пройти весь путь до полного указания пользовательской модели, чтобы использовать адрес электронной почты в качестве имени пользователя, поэтому, возможно, я что-то пропустил. Если бы был способ обеспечить уникальные поля в модели Django User, я не думаю, что это будет проблемой.
так Благодарения и так как у меня существующих пользователей, мне нужно точно воссоздать существующую модель 'User' путем расширения' AbstractBaseUser'? Наверное, я немного обеспокоен копированием в той же проблеме, что и в источнике (так много для DRY) и имеет проблемы с конфликтом. – dkhaupt
Это закончилось тем, что мне пришлось удалить «abstract = True» из 'Meta' скопированное определение AbstractUser, но после этого все было в порядке. Благодаря! – dkhaupt
Добро пожаловать. Я использовал 'abstract = False' в моем коде. Использование одного и того же имени класса не вызовет никаких проблем, если вы будете осторожны при импорте класса 'User'. – Saeed