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

Pie*_*NAY 5 django django-models

我使用代理模式上User

class Nuser(User):
    class Meta:
        proxy = True
    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)

我在整个观点中都使用它.
我想知道获取此对象实例的最佳方法request.user

我每次都这样做

Nuser.objects.get(pk=request.user.pk)
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法呢?

Ben*_*end 12

您可以编写一个自定义身份验证后端,它返回代理模型的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
Run Code Online (Sandbox Code Playgroud)

在你的 settings.py

AUTHENTICATION_BACKENDS = ['my_project.auth_backends.ProxiedModelBackend',]
Run Code Online (Sandbox Code Playgroud)