Django admin different list_display based on what filter is selected?

Viewed 186

I want to display based on a Boolean field filter different list_displays for my model in Django admin. For example, if the boolean field is false I should list_display=('name', 'age') but if is true I should display list_display=('name', 'school', 'grades') assuming that my Model have all those fields.

1 Answers

According to the documents best practice would be using ModelAdmin.get_list_display which allow you to change list_display per request

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)
Related