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

如何在Django REST Framework中实现按日期范围过滤查询对象?

DRF中DateFromToRangeFilter日期范围过滤失效问题排查与解决

问题场景

已有包含title和created_date字段的Report模型,在普通Django项目中可通过django-filter的DateFromToRangeFilter实现日期范围过滤,但迁移到DRF后,配置了Serializer、ViewSet和FilterSet并完成settings.py相关配置,过滤功能仍未生效。

代码错误排查与修正

1. filters.py缺失核心导入

原代码未导入django_filters模块,导致DateFromToRangeFilter无法被识别,修正后代码:

import django_filters
from .models import Report

class ReportFilter(django_filters.FilterSet):
    created_date = django_filters.DateFromToRangeFilter()
    class Meta:
        model = Report
        fields = ['created_date']

2. urls.py拼写错误与路由配置问题

  • 存在拼写错误:fom .views import ReportViewSet 应改为 from .views import ReportViewSet
  • Router注册前缀格式错误:routers.DefaultRouter()的register方法不需要给前缀加^和/$,框架会自动处理URL匹配规则,修正后代码:
from django.urls import path, include
from rest_framework import routers
from .views import ReportViewSet

r = routers.DefaultRouter()
r.register('report', ReportViewSet)

urlpatterns = [
   path('', include(r.urls))
]

3. 请求参数格式验证

DateFromToRangeFilter要求的请求参数格式为created_date_min(起始日期)和created_date_max(结束日期),示例请求URL:

http://localhost:8000/report/?created_date_min=2024-01-01&created_date_max=2024-01-31

额外验证项

  • 确认settings.py中已将'django_filters'添加到INSTALLED_APPS
  • 若全局未配置DRF过滤后端,ViewSet中已显式指定filter_backends = [DjangoFilterBackend,],此配置有效无需额外修改

内容的提问来源于stack exchange,提问作者Firdavsbek Narzullaev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:04:58