【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2020-06-11
      • 1970-01-01
      • 2015-07-11
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      相关资源
      最近更新 更多