Создание одного общего поля модели как для электронной почты, так и для никнейма в 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.

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