我想通过不同的权限自定义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的文档,但不是很详细。
答案 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