5

我试图在 Django 1.5 下使可插入应用程序更具弹性,您现在拥有一个自定义的可定义用户模型。

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

user = models.ForeignKey(settings.AUTH_USER_MODEL)

django.contrib.auth.models.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 中有更简洁的方法来做到这一点。

我错过了文档中的某些内容吗?

4

2 回答 2

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()
于 2013-05-23T20:49:33.403 回答
7

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

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

如果我阅读get_user_model 的介绍,我可以节省几个小时......

于 2013-12-09T03:51:21.957 回答