【问题标题】:Django admin different list_display based on what filter is selected?Django admin 不同的 list_display 基于选择的过滤器?
【发布时间】:2020-12-29 07:02:36
【问题描述】:
我想根据布尔字段过滤器在 Django 管理中为我的模型显示不同的 list_displays。例如,如果布尔字段是 false 我应该 list_display=('name', 'age') 但如果是 true 我应该显示list_display=('name', 'school', 'grades') 假设我的模型具有所有这些字段。
【问题讨论】:
标签:
django
django-models
django-forms
django-admin
django-admin-filters
【解决方案1】:
根据documents 最佳做法是使用ModelAdmin.get_list_display,它允许您根据请求更改list_display
class MySimpleListFilter(admin.SimpleListFilter):
parameter_name = 'filter_parameter_name'
...
class MyModelAdmin(models.ModelAdmin):
list_display = ('my','default','fields')
def get_list_display(self,request):
if request.GET.get('filter_parameter_name',None) is not None:
return self.list_display + ['my_protected_column']
def my_protected_column(self,instance):
return "Protected column for "+str(instance)