我在User
上使用代理模型
class Nuser(User):
class Meta:
proxy = True
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
我在整个观点中都使用它
我想知道为request.user
每次我
Nuser.objects.get(pk=request.user.pk)
有没有更简单的方法呢?
答案 0 :(得分:11)
您可以编写一个自定义身份验证后端,该后端返回代理模型的实例而不是User
实例:
from django.contrib.auth.backends import ModelBackend
class ProxiedModelBackend(ModelBackend):
def get_user(self, user_id):
try:
return Nuser.objects.get(pk=user_id)
except Nuser.DoesNotExist:
return None
在settings.py
AUTHENTICATION_BACKENDS = ['my_project.auth_backends.ProxiedModelBackend',]
答案 1 :(得分:0)
无论何时查询MyNurse
对象,都无法让Django返回Nurse
对象。
Nurse
个对象的查询集将返回这些类型的对象。代理对象的重点是依赖于原始Nurse
的代码将使用这些代码,并且您自己的代码可以使用您包含的扩展(无论如何其他代码都不依赖)。它不是用你自己创造的东西替换Nurse
(或任何其他)模型的方法。