2014-02-08 205 views
0

我想通過不同的權限自定義list_display。 例如,super可以看到「價格」,其他則不是。 admin.pyDjango admin自定義list_display

class bookAdmin(admin.ModelAdmin): 
    def display_resort(request): 
     if request.user.is_super: 
      resort_list = ["name", "author", "price"] 
     else: 
      resort_list = ["name", "author"] 
     return resort_list 
    list_display = ['display_resort'] 

,但我得到

display_resort() takes exactly 1 argument (2 given) 

我想返回的東西是不正確的方法,我也嘗試在元組,迭代和串等回報「resort_list」但都失敗了。 簡單地說,我想定製整個list_display不只是它的一個領域。 尋求你的幫助,謝謝。

---隨着freylis的幫助下,我的代碼是現在:

class bookAdmin(admin.ModelAdmin): 
    def get_list_display(self, request): 
     default_list_display = super(bookAdmin, self).get_list_display(request) 
     if request.user.is_super: 
      default_list_display = ["name", "author", "price"] 
     else: 
      default_list_display = ["name", "author"] 
     return default_list_display 

這裏的get_list_display https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_list_display的文件,但不是很詳細。

回答

1

在第一,類的所有方法都第一個參數self,所以你需要定義你喜歡的方法:

def display_resort(self, request): 
    if request.user.is_super: 
     resort_list = ["name", "author", "price"] 
    else: 
     resort_list = ["name", "author"] 
    return resort_list 

但是,這不是一個Django的方式。 你需要在你bookAdmin類中定義的方法get_list_display

class bookAdmin(admin.ModelAdmin): 

    def get_list_display(self, request): 
     default_list_display = super(bookAdmin, self).get_list_display(request) 
     if request.user.is_superuser: 
      # return any list 
     return default_list_display 
+0

它的工作原理,謝謝。在「If」部分,我添加不符合條件的「else」只會在change_list頁面中顯示第一個字段。 – JerryLong

相關問題