如何在Django Admin中为DateTime字段设置日历式list_filter筛选器?
实现Django Admin弹出式日历日期时间筛选
方法一:使用Django内置DateTimeRangeFilter(Django 3.1+)
Django 3.1及以上版本自带支持弹窗日历的时间范围筛选器,直接替换默认配置即可:
修改admin.py
from django.contrib import admin from django.contrib.admin.filters import DateTimeRangeFilter from .models import XYZ class XYZAdmin(admin.ModelAdmin): list_filter = ( ('start', DateTimeRangeFilter), # 为start字段指定弹窗日历筛选器 ('end', DateTimeRangeFilter), # 可选:给end字段也配置同样的筛选器 ) admin.site.register(XYZ, XYZAdmin)
配置完成后,Admin列表页的时间筛选器会变为带日历图标的输入框,点击即可弹出日历选择自定义日期时间范围,匹配你想要的效果。
方法二:使用第三方包django-admin-rangefilter(兼容低版本Django)
如果你的Django版本低于3.1,或者需要更灵活的功能,可借助第三方包实现:
1. 安装包
pip install django-admin-rangefilter
2. 配置settings.py
将rangefilter添加到INSTALLED_APPS:
INSTALLED_APPS = [ # ... 其他已有应用 'rangefilter', # ... 你的业务应用 ]
3. 修改admin.py
from django.contrib import admin from rangefilter.filters import DateTimeRangeFilter from .models import XYZ class XYZAdmin(admin.ModelAdmin): list_filter = ( ('start', DateTimeRangeFilter), ('end', DateTimeRangeFilter), ) admin.site.register(XYZ, XYZAdmin)
此包提供的筛选器同样支持弹窗日历选择,交互样式与内置版本一致,同时兼容更早的Django版本。
内容的提问来源于stack exchange,提问作者Ali Rahmani
相关产品推荐
相关产品推荐

