在Django> = 1.5?
中引用用户模型的最佳方法是什么?阅读Referencing the User model后,我开始使用(1)一段时间了:
(1)
from django.conf import settings
from django.db import models
class Article(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL)
但是遵循Python的Zen,可读性很重要,为什么不这样:
(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)
答案 0 :(得分:11)
get_user_model
can now be called at import time, even in modules that define models. 这意味着你可以这样做:
models.ForeignKey(get_user_model(), ...)
原始答案(Django< = 1.11)
如果您在模块级别使用get_user_model
,则可能会experience circular reference出现问题。导入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
,则auth.User
将返回Django的默认用户模型AUTH_USER_MODEL
。
答案 1 :(得分:3)
只要您扩展用户模型(或根本不触摸它),您就可以:
from django.contrib.auth.models import User
author = models.ForeignKey(User)
答案 2 :(得分:2)
我不认为“可读性计数”是关于第二种情况。
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
答案 3 :(得分:1)
在我看来,第二个。使用第二种方法,您可以将所有内容放在同一个文件中,而不需要修改2个不同的文件,以及可以找到的问题。