Задать вопрос
@SashaN69
Школота

Как лучше реализовать?

Делаю профиль для пользователя на сайте и думаю как будет лучше сделать .Для авторизации использую стандартную систему django, и хочу добавить несколько дополнительных полей для пользователя в базу, думаю создать новую таблицу с нужными полями и привязывать к ид пользователя, или добавить новые поля прямо в таблицу auth_user?
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
AlexNest
@AlexNest
Работаю с Python/Django
создать новую таблицу с нужными полями

В целом - относительно рабочий, пусть и слегка грубоватый, на мой взгляд, вариант.
добавить новые поля прямо в таблицу auth_user?

1. Как вы себе это представляете? Переопределять данные на уровне загружаемого модуля - ужасная идея. Как минимум потому-что при размещении на сервере все зависимости придется ставить заново.
2. Почему-бы не наследовать модель юзера и в ней уже добавить нужные поля, как-то так:
# models.py

def get_file_path(instance, filename):
    """
        get_file_path - генерирует случайное имя для аватара
    """
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join('avatars/%Y/%m/%d/', filename)
....

class UserAccount(AbstractUser):
    """
        Расширенная модель пользователя. Добавлено
        отчество, аватар и необязательный внешний
        ключ к учебной группе.
    """
    avatar = models.ImageField(verbose_name='Аватар',
                               upload_to=get_file_path, blank=True) 
    patronymic_name = models.CharField(verbose_name='Отчество',
                                       max_length=150,
                                       blank=True)
    study_group = models.ForeignKey(StudyGroup, on_delete=models.PROTECT,
                                    blank=True, null=True,
                                    verbose_name='Учебная группа')

# settings.py
AUTH_USER_MODEL = 'accounts.UserAccount'
Ответ написан
Комментировать
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы