如何在Django Admin中使用日期选择器作为过滤器?
在Django Admin中添加单个日期选择器过滤器
要实现单个日期的选择过滤,无需依赖第三方库,自定义一个SimpleListFilter即可,步骤如下:
1. 自定义日期过滤器类
在你的app的admin.py中,创建继承自admin.SimpleListFilter的过滤器类:
from django.contrib import admin from django.utils.translation import gettext_lazy as _ class SingleDateFilter(admin.SimpleListFilter): title = _('选择日期') # 过滤器显示标题 parameter_name = 'target_date' # 用于URL传参的标识名 def lookups(self, request, model_admin): # 返回空的选项组,实际渲染由自定义模板处理 return (('', _('选择日期')),) def queryset(self, request, queryset): # 处理用户输入的日期,过滤对应记录 date_value = self.value() if date_value: # 替换`created_at`为你模型中实际要过滤的日期字段名 return queryset.filter(created_at__date=date_value) return queryset def template(self): # 自定义过滤器模板,渲染日期输入框和操作按钮 return """ {% load i18n %} <h3>{% trans title %}</h3> <ul class="admin-filter-{{ title|lower }}"> <li> <input type="date" name="{{ parameter_name }}" value="{{ value|default:'' }}" class="vDateField"> <button type="submit" class="button">{% trans '过滤' %}</button> {% if value %} <a href="{{ request.path }}" class="button">{% trans '清除' %}</a> {% endif %} </li> </ul> """
2. 在Admin类中配置过滤器
将自定义过滤器添加到目标模型的Admin配置中:
from .models import YourModel # 替换为你的模型类 @admin.register(YourModel) class YourModelAdmin(admin.ModelAdmin): list_display = ('id', 'created_at', ...) # 替换为你的模型字段 list_filter = (SingleDateFilter,) # 注册自定义过滤器
3. 注意事项
- 务必将代码中的
created_at替换为你模型中实际需要过滤的日期字段名 - 模板中使用的
vDateField是Django Admin自带的样式类,可确保输入框与Admin界面风格统一 - 若需要更美观的交互效果,可将HTML5原生
date输入框替换为jQuery UI Datepicker等插件,但需在Admin中引入对应静态资源
内容的提问来源于stack exchange,提问作者Tomasz Brzezina
相关产品推荐
相关产品推荐

