在Django 1.5中导入AUTH_USER_MODEL的更好方法

时间:2013-05-23 20:41:25

标签: python django

我正在努力使可插拔应用程序在Django 1.5下更具弹性,现在您可以使用自定义的可定义用户模型。

将外键添加到模型时,我可以这样做:

user = models.ForeignKey(settings.AUTH_USER_MODEL)

这样可以节省我在django.contrib.auth.models.User不再是用户模型时中断的文件顶部的User导入。但有时在测试时,我需要能够创建一个用户,而我能够为此做出的最好的是

from django.conf import settings
from django.db.models import get_model
User = get_model(*settings.AUTH_USER_MODEL.split('.'))

然后我可以做以下事情:

User.objects.create(username="test")

在我的测试中(某些对象将FK绑定到用户,我在测试中需要其中一个对象)。

它并没有让我觉得特别优雅,但我真的没有看到任何更清洁的方法在1.5中这样做。

我是否遗漏了文档中的内容?

2 个答案:

答案 0 :(得分:11)

你能做到的一种方法是:

try:
    from django.contrib.auth import get_user_model
except ImportError: # django < 1.5
    from django.contrib.auth.models import User
else:
    User = get_user_model()

答案 1 :(得分:6)

请记住, get_user_model无法在模块级别调用。特别是,甚至不要考虑在models.py中使用它来定义ForeignKey关系。如果必须,请使用AUTH_USER_MODEL设置。

否则,正如我所发现的那样,在某些模型无法使用的情况下,您将会遇到奇怪且难以调试的错误。事实上,在一个完全不同的django应用程序中,我只是在某个文件中添加print get_user_model()导致另一个导入失败。

如果我读了this introduction to get_user_model,我本可以节省几个小时......