我有一个 Django 模型,它有一个日期字段,我想创建一个列表过滤器,它将显示以下选项,
Current
2017
2016
2015
点击年份链接后,它将折叠成月份,
2017
01
02
03
04 ...
我尝试了默认的 DateFieldListFilter 但它只有以下选项,
Any
Today
Past 7 days
This month
This year
我试图使用 SimpleListFilter 解决这个问题,但未能成功。
class MonthFilter(admin.SimpleListFilter):
title = 'Month'
parameter_name = 'month'
def lookups(self, request, model_admin):
months = [["current", "Current"]]
qs = model_admin.model.objects.exclude(ts_from=None).order_by('ts_from')
last= qs[0]
last_year = last.ts_from.year
current = timezone.now()
current_year = current.year
months.append([current_year, current_year])
months.append([last_year, last_year])
return months
def queryset(self, request, queryset):
if self.value():
return queryset.filter(ts_from__contains=self.value())
else:
return queryset
请您参考如下方法:
我猜你还没有在查询集中用月份过滤
def queryset(self, request, queryset):
month = request.GET.get('month') or datetime.now().month
if self.value():
return queryset.filter(ts_from__contains=self.value(), created__month=month)
else:
return queryset
