从下面的屏幕快照中可以看到,像这样使用和自定义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的情况下非常有用)。 我想重命名或删除该“全部”选项,就像在屏幕截图中看到的蜜蜂一样
答案 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,
}