Django管理员自定义list_display

时间:2014-02-08 02:43:42

标签: django admin

我想通过不同的权限自定义list_display。 例如,超级可以看到"价格"其他则不是。 admin.py

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 个答案:

答案 0 :(得分: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-way。 您需要在get_list_display类中定义bookAdmin方法:

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