Лучший способ ссылки на модель пользователя в Django >= 1.5
Каков наилучший способ ссылки на модель пользователя в 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 of 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)
Ответы
Ответ 1
Это означает, что вы можете сделать это:
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
не обнаружена в файле настроек.
Ответ 2
Пока вы просто расширяете модель пользователя (или вообще не трогаете его), выполните следующие действия:
from django.contrib.auth.models import User
author = models.ForeignKey(User)
Ответ 3
По-моему второй. Во-вторых, вы можете иметь все в одном файле, и вам не нужно изменять 2 разных файла, с возможными проблемами, которые вы можете найти с этим.
Ответ 4
Я не думаю, что "Чтение счетчиков" - это второй случай.
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