2016-04-07 7 views
0

私はここにデコレータを書いていますコードです。Djangoビューにディスパッチするカスタムデコレータを適用しますか?

def is_envlocked(func): 
    def is_lockedwrapper(self): 
     username = "tejesh.s" 
     env_id = self.object.env_id 
     env = Capacity.models.Env.objects.get(id=env_id) 
     if env.user == username: 
      return True 
     else: 
      return reverse('envapps', kwargs={'envid':self.object.env.id}) 
    return is_lockedwrapper 

class EnvappsCreate(CreateView): 
    model = Capacity.models.Envapps 
    fields=['appname','VM_Image','functional_count','flavor'] 
    template_name = 'envapps_create_form.html' 
    @method_decorator(login_required) 
    def dispatch(self, request,envid): 
    return super(EnvappsCreate, self).dispatch(request) 

しかし、このデコレータをディスパッチメソッドに追加して、どうすればいいのですか?

+0

を求めていますか? – v1k45

+0

はい、試しましたが、私はオブジェクトにアクセスできません。 –

答えて

1

これはin the docsに記載されています。あなたは、次のいずれかを行うことができます

decorators = [login_required, is_envlocked] 
@method_decorator(decorators) 
def dispatch(self, request, envid): 

それともmethod_decorator()複数回使用:あなたは発送方法で複数のデコレータを使用することができます場合は、

@method_decorator(login_required) 
@method_decorator(is_envlocked) 
def dispatch(self, request, envid): 
+0

ありがとう、私は自分のデコレータ内の自己オブジェクトにアクセスすることができます、それはオブジェクトが属性 'オブジェクト'を持っていないことを示しています。 –

+0

オブジェクトがありません(これはビューデコレータです)。おそらく 'self.object'のインスタンスを' request'で置き換えるべきです。 – rnevius

関連する問題