在Django> = 1.5中引用User模型的最佳方法

lbo*_*gav 15 python django django-models

在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)
Run Code Online (Sandbox Code Playgroud)

但是遵循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)
Run Code Online (Sandbox Code Playgroud)

Ed *_*Tan 11

更新:从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)
Run Code Online (Sandbox Code Playgroud)

getattr将返回Django的默认用户模式,这是auth.User,如果AUTH_USER_MODEL在设置文件中未检测到.