2012-05-21 97 views
3

用戶代理模型我使用代理模式上UserDjango的 - 從請求

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) 

最好的辦法是不是有一個更簡單的方法來做到這一點?

回答

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

有沒有辦法讓Django的回報,例如,每當您查詢Nurse對象時,都會輸入一個MyNurse對象。 對象Nurse的查詢集將返回這些類型的對象。代理對象的全部要點是,依賴原始代碼的代碼將使用這些代碼,並且您自己的代碼可以使用您包含的擴展(不管其他代碼依賴於哪個代碼)。這不是一種用你自己創造的東西來替代任何地方的Nurse(或任何其他)模型的方法。