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
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
在设置文件中未检测到.