djando rest api中的filter-backend

时间:2017-10-25 04:17:45

标签: django-rest-framework

我正在使用django rest api.can我们使用filter-backend来检索2个日期之间的数据,日期作为url参数给出。

class DotOrderViewSet(viewsets.ModelViewSet):
        permission_classes = (GroupPermissionExternalApi,)
        serializer_class = dot_order_serializers.DotOrderSerializer
        queryset = dot_order_models.DotOrder.objects.all()
        filter_backends = (filters.DjangoFilterBackend, 
                       filters.SearchFilter, filters.OrderingFilter,)
        search_fields = ('id', 'merchant__email', 'merchant__contact', 
                       'biker__name', 
                      'biker__contact',biker__datetime_created',
                       'biker__type')
        ordering_fields = '__all__'

        def list(self,request):
                start=request.GET.get('from_date')
                end=request.GET.get('to_date')

1 个答案:

答案 0 :(得分:0)

我发现您正在使用DjangoFilterBackend,因此您可以创建自己的自定义filter_class并使用DateTimeFromToRangeFilter

class DotOrderFilterSet(FilterSet):
    date_range = DateTimeFromToRangeFilter()

    class Meta:
        model = dot_order_models.DotOrder
        fields = ['date_range', ... ]

fields还应包含您要过滤的DotOrder模型中的其余字段。然后在视图中添加过滤器类:

class DotOrderViewSet(viewsets.ModelViewSet):
    ...
    filter_backends = (filters.DjangoFilterBackend, ...)
    filter_class = DotOrderFilterSet
    ...

您的查询参数应为:date_range_afterdate_range_before。 有关DateTimeFromToRangeFilter的更多详细信息,请参见here