Подтвердить что ты не робот

Django с использованием get_user_model vs settings.AUTH_USER_MODEL

Чтение документации Django:

get_user_model()

Вместо прямого обращения к пользователю вы должны обратиться к пользователю с помощью django.contrib.auth.get_user_model(). Этот метод вернуть текущую активную модель пользователя - пользовательскую модель пользователя, если она, или Пользователь в противном случае.

Когда вы определяете для пользователя внешний ключ или отношения "многие ко многим" модели, вы должны указать пользовательскую модель с помощью AUTH_USER_MODEL установка.

Я смущен приведенным выше текстом. Должен ли я делать это:

author = models.ForeignKey(settings.AUTH_USER_MODEL)

или это...

author = models.ForeignKey(get_user_model())

Оба, похоже, работают.

4b9b3361

Ответ 1

Использование settings.AUTH_USER_MODEL приведет к задержке поиска фактического класса модели до загрузки всех приложений. get_user_model попытается получить класс модели в момент, когда ваше приложение будет импортировано в первый раз.

get_user_model не может гарантировать, что модель User уже загружена в кэш приложения. Он может работать в вашей конкретной настройке, но это сценарий с пропуском. Если вы измените некоторые настройки (например, порядок INSTALLED_APPS), это может сильно нарушить импорт, и вам придется потратить дополнительное время на отладку.

settings.AUTH_USER_MODEL передаст строку в качестве модели внешнего ключа, и если извлечение класса модели завершится неудачно во время импорта этого внешнего ключа, поиск будет задерживаться до тех пор, пока все классы классов не будут загружены в кеш.

Ответ 2

Способ возврата к модели пользователя по умолчанию, если AUTH_USER_MODEL не установлен:

from django.conf import settings
from django.contrib.auth.models import User

USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', User)