6

User我在like上使用代理模型

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)

没有更简单的方法吗?

4

2 回答 2

14

您可以编写一个自定义身份验证后端,该后端返回代理模型的实例而不是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',]
于 2012-05-21T09:20:21.587 回答
-1

MyNurse例如,当您查询对象时,没有办法让 Django 返回一个Nurse对象。对象的查询Nurse集将返回这些类型的对象。代理对象的全部意义在于依赖原始代码的代码Nurse将使用这些代码,而您自己的代码可以使用您包含的扩展(无论如何都没有其他代码依赖)。这不是一种Nurse用你自己创造的东西来代替任何地方的(或任何其他)模型的方法。

于 2014-03-20T10:12:51.470 回答