Лучший способ ссылки на модель пользователя в Django> = 1.5

Каков наилучший способ ссылки на модель User в Django> = 1.5?

После чтения ссылки на модель пользователя я начал использовать (1) на некоторое время:

(1)

from django.conf import settings from django.db import models class Article(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL) 

Но, следуя Zen Python, читаемость подсчитывается, почему бы и нет:

(2)

 from django.contrib.auth import get_user_model from django.db import models User = get_user_model() class Article(models.Model): author = models.ForeignKey(User) 

4 Solutions collect form web for “Лучший способ ссылки на модель пользователя в Django> = 1.5”

UPDATE: Начиная с Django 1.11, get_user_model теперь можно вызывать во время импорта, даже в модулях, определяющих модели.

Это означает, что вы можете сделать это: models.ForeignKey(get_user_model(), ...)


Оригинальный ответ (Django <= 1.11)

Если вы используете get_user_model на уровне модуля, могут возникнуть проблемы с круговой ссылкой . Другой вариант импорта модели пользователя auth:

 from django.conf import settings AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') # models class Article(models.Model): author = models.ForeignKey(AUTH_USER_MODEL) 

getattr вернет пользовательскую модель Django по умолчанию, которая является auth.User , если AUTH_USER_MODEL не обнаружен в файле настроек.

Пока вы просто расширяете модель пользователя (или вообще не трогаете его), вы делаете:

 from django.contrib.auth.models import User author = models.ForeignKey(User) 

По-моему, вторая. Во втором случае вы можете иметь все в одном файле, и вам не нужно изменять 2 разных файла, с возможными проблемами, которые вы можете найти с этим.

Я не думаю, что «Readability counts» – это второй случай.

 author = models.ForeignKey(User) 

выглядит как

 from django.contrib.auth.models import User ... # Imagine tons of code here class Article(models.Model): author = models.ForeignKey(User) 

для меня. Будет удивлен, когда не сработает

 article.author.get_full_name() # or any auth.models.User specific method 
  • Как сделать не равным в фильтрации запросов Django?
  • Обработка состояния гонки в model.save ()
  • Установите Django IntegerField по выбору = ... name
  • Django: Фильтрация поля datetime по * только * значение года?
  • Как добавить ссылку с страницы администрирования Django одного объекта на страницу администратора связанного объекта?
  • Ограничение выбора ForeignKey для подклассов
  • Foreignkeyfield - подробное имя, не отображаемое в форме
  • Django 1.7 где поставить код для добавления групп программно?
  •  
    Interesting Posts for Van-Lav

    Базовая программа для преобразования целого числа в римские цифры?

    Принимая сигнал от события закрытия терминала в Python

    Как функция возвращает фигуру в python (используя matplotlib)?

    Имея трудности с захватом вывода подпроцесса, который обновляет статус на месте

    Движение Pygame – sprite вызывает слои

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

    Как проверить последний элемент списка python?

    Получить только последние 128 байтов mp3-файла через http-соединение

    Являются ли модули python первоклассными гражданами?

    Как работают файлы * .so, и где они идут в UNIX?

    Python: Как лучше всего разобрать простую грамматику?

    Python: преобразовать матрицу в положительную полуопределенную

    Django: выбор значений с максимальными отметками времени или присоединение к одной таблице

    Использование scipy.integrate.complex_ode вместо scipy.integrate.ode

    Python: цикл над последовательными символами?

    Python - лучший язык программирования в мире.