2012-05-21 2 views
3

에서 사용자 프록시 모델 난 내 의견에 걸쳐 사용장고 - 요청

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

같은 User에 프록시 모델을 사용합니다. 그것을 할 수있는 간단한 방법은
은 내가

Nuser.objects.get(pk=request.user.pk) 

을 할 때마다 request.user

이 개체의 인스턴스를 얻을 수있는 가장 좋은 방법을 궁금가 아닌가?

답변

8

당신은 대신 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',] 
+0

좋은 해결책입니다. 감사합니다. –

0

, Nurse 개체를 쿼리 할 때마다 MyNurse 개체가 표시됩니다. Nurse에 대한 쿼리 세트는 이러한 유형의 오브젝트를 리턴합니다. 프록시 객체의 요점은 원래 Nurse에 의존하는 코드가이를 사용하고 자신의 코드가 포함 된 확장을 사용할 수 있다는 것입니다 (어쨌든 다른 코드가 의존하지 않음). Nurse (또는 다른 모델)을 어디서나 자신의 작품으로 대체하는 것은 아닙니다.