我正在努力使可插拔应用程序在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中这样做。
我是否遗漏了文档中的内容?
答案 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,我本可以节省几个小时......