ela*_*ver 7 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())
Run Code Online (Sandbox Code Playgroud)
Django 将在任何情况下插入一个“全部”选项(这对于 %99 次都很好)。我想重命名或删除“全部”选项,如截图所示
我最终通过浏览可以在此链接中找到的源代码并覆盖该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,
}
Run Code Online (Sandbox Code Playgroud)
正如 Linh 提到的:对于任何只想删除 all 选项的人,只需'display': 'Yes'从选择函数中的第一个 yield{} 中删除即可
| 归档时间: |
|
| 查看次数: |
1675 次 |
| 最近记录: |