Чтение документации Django:
get_user_model ()
Вместо того, чтобы ссылаться на пользователя напрямую, вы должны ссылаться на модель пользователя с помощью django.contrib.auth.get_user_model (). Этот метод вернет текущую активную модель User - пользовательскую модель User, если она указана, или User в противном случае.
Когда вы определяете внешний ключ или отношения «многие ко многим» для модели User, вы должны указать настраиваемую модель с помощью параметра AUTH_USER_MODEL.
Меня смущает приведенный выше текст. Должен ли я делать это:
author = models.ForeignKey(settings.AUTH_USER_MODEL)
или это...
author = models.ForeignKey(get_user_model())
Кажется, оба работают.
AUTH_USER_MODEL
настройкой в коде, который выполняется во время импорта.get_user_model()
Работает только после того, как Django импортировал все модели».get_user_model()
, для использования атрибутов классаAUTH_USER_MODEL
?Новое с Django 1.11.
Начиная с Django 1.11, вы можете использовать
get_user_model()
в обоих случаях! Так что, если вы не хотите больше об этом беспокоиться, просто возьмите.«в обоих случаях» означает: если вам нужна модель пользователя для доступа к ее атрибутам, а также если вы хотите определить отношение ForeignKey / ManyToMany.
Из журнала изменений :
так что ... есть ли еще причина использовать
settings.AUTH_USER_MODEL
? Что ж, документы по-прежнему рекомендуютsettings.AUTH_USER_MODEL
(который является строкой) для определения отношений, но без явной причины. Может быть полезно для производительности, но не имеет большого значения.Пример кода:
from django.db import models from django.contrib.auth import get_user_model ... ... user = models.ForeignKey( get_user_model(), null=True, # explicitly set null, since it's required in django 2.x. - otherwise migrations will be incompatible later! ... )
источник
get_user_model()
можно вызвать во время импорта; однако Django по-прежнему советует пользователям определять внешний ключ и отношения «многие ко многим» с помощью AUTH_USER_MODELget_user_model
, особенно для читателей, которые не понимают различия)Начиная с Django 1.11,
get_user_model()
фактически используетsettings.AUTH_USER_MODEL
:def get_user_model(): """ Return the User model that is active in this project. """ try: return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False) except ValueError: raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'") except LookupError: raise ImproperlyConfigured( "AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL )
источник
settings.AUTH_USER_MODEL возвращает строку (расположение модели пользователя), например, user_accounts.User.
get_user_model () возвращает АКТУАЛЬНЫЙ класс модели, а не строку.
Поэтому в случаях, когда вам нужна модель User, используйте get_user_model (). Если вам нужно его местоположение (module.model в виде строки), используйте settings.AUTH_USER_MODEL.
источник
Способ возврата к модели пользователя по умолчанию, если AUTH_USER_MODEL не установлен:
from django.conf import settings from django.contrib.auth.models import User USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', User)
источник
AUTH_USER_MODEL
уже имеет значение по умолчанию, поэтому оно всегда будет установлено.User
- это модель