18

在 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)

但是遵循 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

4 回答 4

12

更新:从 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在设置文件中未检测到。

于 2014-02-07T01:53:53.373 回答
3

只要您只是扩展用户模型(或根本不触摸它),您就可以:

from django.contrib.auth.models import User

author = models.ForeignKey(User)  
于 2013-09-24T22:22:11.690 回答
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
于 2013-09-25T15:54:46.640 回答
1

在我看来是第二个。使用第二种方法,您可以将所有内容都放在同一个文件中,而无需修改 2 个不同的文件,您可以找到可能的问题。

于 2013-09-24T22:10:25.743 回答