You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:41:32