Django管理员列表过滤器删除所有选项

时间:2018-12-17 19:19:19

标签: python django django-admin django-advanced-filters

从下面的屏幕快照中可以看到,像这样使用和自定义django管理员过滤器时:

class DealExpiredListFilter(admin.SimpleListFilter):
  title = 'expired'

  parameter_name = 'expired'

  def lookups(self, request, model_admin):
      return (
          ('yes', 'yes'),
          ('no', 'no'),
      )

  def queryset(self, request, queryset):
      if self.value() == "yes":
          return queryset.filter(end_date__lt=timezone.now())
      elif self.value() == "no":
          return queryset.exclude(end_date__lt=timezone.now())

在任何情况下,Django都会插入“全部”选项(这在%99的情况下非常有用)。 我想重命名或删除该“全部”选项,就像在屏幕截图中看到的蜜蜂一样

scrrenshot

1 个答案:

答案 0 :(得分:2)

我最终通过浏览可以找到here in this link的源代码并覆盖了choices函数来解决了这个问题。我只更改了“全部”选择​​,以在添加到我的过滤器类的这段代码中显示“是”:

from django.utils.encoding import force_text

def choices(self, changelist):
    """Copied from source code to remove the "All" Option"""
    yield {
        'selected': self.value() is None,
        'query_string': changelist.get_query_string({}, [self.parameter_name]),
        'display': 'Yes',
    }
    for lookup, title in self.lookup_choices:
        yield {
            'selected': self.value() == force_text(lookup),
            'query_string': changelist.get_query_string({self.parameter_name: lookup}, []),
            'display': title,
        }