2016-11-28 93 views
0

我使用此裝飾,使這個頁面只工作人員:@staff_member_required拋出「對象有沒有屬性‘用戶’」

class MyModelAdmin(admin.ModelAdmin): 

    @staff_member_required 
    def dostuff(self, request): 
     return HttpResponse("This is secret") 

    def get_urls(self): 
     urls = super(MyModelAdmin, self).get_urls() 
     my_urls = [ 
      url(r"^dostuff/$", self.dostuff) 
     ] 
     return my_urls + urls 

但由於某種原因,我得到:

AttributeError: 'MyModelAdmin' object has no attribute 'user'

沒有裝飾者,視圖工作正常(但任何人都可以看到它)。

回答

3

您需要使用method_decorator()

from django.utils.decorators import method_decorator 

class MyModelAdmin(admin.ModelAdmin): 

    @method_decorator(staff_member_required) 
    def dostuff(self, request): 
     return HttpResponse("This is secret") 
+1

謝謝,這個作品!通過閱讀文檔中的解釋,我發現[this](https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/#id1):'類上的方法不是與獨立函數非常相似,所以您不能只將函數裝飾器應用於該方法 - 首先需要將其轉換爲方法裝飾器。 – Veehmot

相關問題