Создание одного общего поля модели как для электронной почты, так и для никнейма в Telegram в зависимости от способа авторизации пользователя в Django(DRF)
Я уже два дня бьюсь над задачей и не могу найти подходящего решения, поэтому буду очень благодарен за любую помощь. Задача заключается в следующем: когда пользователь регистрируется через Yandex/Google (я использую drf_social_auth2
), при сохранении его в базе данных, значением поля username
становится адрес электронной почты пользователя. Однако при авторизации через Telegram значением того же поля username
должен быть ник пользователя в Telegram. Первая часть реализуется с помощью атрибута USERNAME_FIELD
и метода get_username
. Вопрос в том, как реализовать вторую часть, чтобы значение username
было равно нику в Telegram?
Одним из вариантов, который я рассматривал, было использование поля username
из родительской модели AbstractUser
для хранения необходимого значения в зависимости от метода, но есть проблема с тем, что drf_social_oauth2, который я использую для авторизации, сохраняет email как значение email, и я не могу найти способ заставить его сохранять email в поле username
.
Вот код для моего User
:
class User(AbstractUser, TimeStampedUUIDModel, PermissionsMixin):
# First and last name do not cover name patterns around the globe
name = CharField(_("Name of User"), blank=True, max_length=255)
email = EmailField(_("email address"), unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = UserManager()
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
def __str__(self):
return f"{self.email}"
@property
def get_short_name(self):
return self.name
Я буду благодарен за любой совет, начиная от настройки drf_social_auth2
и заканчивая созданием некоего динамического USERNAME_FIELD
.