Skip to main content
 首页 » 编程设计

python之如何在 Django 管理中基于月份和年份创建自定义列表过滤器

2025年02月15日25xing901022

我有一个 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