Вы в разделе "Я c Django"

Раздел разработан на базе материала Evgenii Legotckoi автора сайта= EVILEG

  • Статья get_user_model

    Автор - zabariap

    Из подраздела - Код

    Стандартный и правильный способ получить модель пользователя в Django.

     

    from django.contrib.auth import get_user_model

    User = get_user_model()

    Что тут происходит: функцияget_user_model() динамически возвращает ту модель пользователя, которая сейчас активна в проекте. Она смотрит на настройку AUTH_USER_MODEL в settings.py: если там указана своя (кастомная) модель — вернёт её, а если нет — использует встроенную User из django.contrib.auth.models.

    Почему не простоfrom django.contrib.auth.models import User?

    Прямой импорт (User = UserModel) хорош, только если вы на 100% уверены, что будете всегда работать со стандартной моделью. Проблема в том, что в новых проектах Django рекомендует сразу настраивать кастомную модель пользователя (например, чтобы использовать email вместо username или добавить свои поля). И если вы потом поменяете настройкуAUTH_USER_MODELна кастомную, код с прямым импортом просто сломается. Функцияget_user_model()решает эту проблему: она адаптируется к текущей конфигурации проекта.

    Когда что использовать?

    • В коде Python (представления, формы, сериализаторы, утилиты) — берите модель черезget_user_model(). Например, чтобы создать пользователя:

      User = get_user_model() user = User.objects.create_user(username='newuser', password='securepassword123')

     

    • В определениях моделей (в поляхForeignKey,OneToOneField,ManyToManyField) — здесь обычно используютsettings.AUTH_USER_MODEL(в виде строки, например'myapp.CustomUser'). Это связано с тем, что при определении связей Django ожидает строковую ссылку, и прямой импорт модели в этом контексте иногда может привести к циклическим импортам или ошибкам инициализации. Пример:

      from django.conf import settings from django.db import models [2](https://www.freecodecamp.org/news/how-to-get-user-model-in-django/)[5](https://stackoverflow.com/questions/24629705/django-using-get-user-model-vs-settings-auth-user-model) class Profile(models.Model):    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete


    Теги записи: User, Профиль,
  • Комментарии

    Нет комментариев

    Форма добавления комментария доступна только авторизованному пользователю.
    Для неавторизованных пользователей доступно только чтение материалов.

    Информация

    Ключевые слова