Django — Лучше ли хранить информацию о пользователе, настроив модель пользователя по умолчанию, или мне следует создать для этого отдельную модель?

#django #django-models

Вопрос:

Это для практического проекта, который я создаю для изучения Джанго. Сайту необходимо будет отслеживать определенные данные о пользователе. Должен ли я настроить модель пользователя по умолчанию? Или создайте новую модель, например —

 class UserData(models.Model):
    '''holds user info'''
    owner = models.ForeignKey(User)
    # data
 

Я не мог найти четкого ответа.

Ответ №1:

Это действительно зависит от обстоятельств. Я бы рекомендовал сохранить User модель небольшой и поместить большую часть дополнительной информации в какую Profile -либо модель. Однако есть некоторые важные вещи, которые вы, возможно, захотите разместить в пользовательской модели, например:

  1. user_type поле — у вас может быть несколько моделей профилей (например, CustomerProfile, VendorProfile и т. Д.), И вам нужен способ различать пользователей и предоставлять им соответствующий доступ
  2. Что — то, связанное с авторизацией, например require_2fa , поле
  3. Если вы начинаете новый проект и не ожидаете много дополнительной информации, вы можете сохранить ее в User модели просто для простоты, особенно если вы уже настраиваете ее (т. Е. заменяете username на email )

Ответ №2:

Пользователи являются особенными, поэтому лучше использовать django.contrib.auth.models.AbstractUser модель поведения пользователя по умолчанию и добавлять туда свои пользовательские поля.

 from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass
 

Я написал статью об этом, и я думаю, что это было бы полезно в данном случае.