Django - 来自请求的用户代理模型

时间:2012-05-21 09:12:06

标签: django django-models

我在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)

有没有更简单的方法呢?

2 个答案:

答案 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(或任何其他)模型的方法。