Лучший способ ссылки на модель пользователя в 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 
  • makemigrations не обнаруживает изменения для расширенных моделей в Django 1.7
  • TypeError: объект «RelatedManager» не является итерируемым
  • valueError в modelforms
  • Джанго говорит, что «id не может быть NULL», но почему?
  • Django: определить, какой пользователь удаляет при использовании сигнала post_delete
  • Отслеживание изменений с момента последнего сохранения в моделях django
  • Как обновить объект модели в django?
  • Как расширить Django Group и использовать ее в Django User
  • Как я могу пропустить миграцию с помощью команды переноса Django?
  • сохранить часовой пояс в моделях Django
  • Django manytomany сигналы?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.