如何使用Django-filter包按Date字段实现时间范围过滤
实现步骤
1. 自定义FilterSet过滤类
首先导入所需依赖,创建针对Metric模型的自定义过滤类,在类中定义时间范围对应的过滤字段:
from django_filters import FilterSet, DateFilter from .models import Metric class MetricFilterSet(FilterSet): # 定义起止日期过滤规则 date_from = DateFilter(field_name='date', lookup_expr='gte', help_text='起始日期,格式YYYY-MM-DD') date_to = DateFilter(field_name='date', lookup_expr='lte', help_text='结束日期,格式YYYY-MM-DD') class Meta: model = Metric # 保留原有的过滤字段,新增时间过滤字段 fields = ['country', 'channel', 'os', 'date_from', 'date_to']
2. 修改视图配置
将原来的filterset_fields配置替换为自定义的FilterSet类:
class MetricViewSet(viewsets.ModelViewSet): serializer_class = MetricSerializer queryset = Metric.objects.all() filter_backends = [DjangoFilterBackend] # 替换原来的filterset_fields配置 filterset_class = MetricFilterSet
功能验证
配置完成后即可通过如下格式的请求筛选时间范围内的记录,原有国家、渠道、操作系统的过滤功能不受影响:
/metrics?date_from=2021-08-17&date_to=2021-08-19
如果需要使用示例中date-gte/date-lte的参数格式,修改FilterSet中字段的参数名、配合lookup_expr配置即可实现。
内容的提问来源于stack exchange,提问作者Jebaseelan Ravi
相关产品推荐
相关产品推荐

