我正在努力使可插拔应用程序在Django 1.5下更具弹性,您现在可以使用自定义的可定义用户模型.
将外键添加到模型时,我可以这样做:
user = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)
这样可以节省我在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('.'))
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
User.objects.create(username="test")
Run Code Online (Sandbox Code Playgroud)
在我的测试中(一些对象将FK绑定到用户,我在测试中需要其中一个对象).
它并没有让我觉得特别优雅,但我真的没有看到任何更干净的方式来做到这一点1.5.
我在文档中遗漏了什么吗?
kar*_*ikr 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()
Run Code Online (Sandbox Code Playgroud)
记住,get_user_model
不能在模块级调用.特别是,甚至不要考虑使用它models.py
来定义ForeignKey
关系.AUTH_USER_MODEL
如果需要,请使用此设置.
否则,正如我所发现的那样,在某些模型无法使用的情况下,您将会遇到奇怪且难以调试的错误.事实上,print get_user_model()
在一个完全不同的django应用程序中,我只是添加到某个文件导致另一个导入失败的情况.
如果我阅读get_user_model的这篇介绍,我本可以节省几个小时......