如何在Django REST Framework中为日期和数字进行范围过滤?其他过滤器(lt,gt等)工作正常。我尝试过很多变种,例如:
import rest_framework_filters as filters
class OrderFilter(filters.FilterSet):
total_price__range = filters.RangeFilter(name='total_price')
created_at__range = filters.DateFromToRangeFilter(name='created_at')
....
class Meta:
model = Order
fields = {
'created_at__range': ['__all__'],
'total_price__range': ['__all__'],
...
}
class OrderViewSet(BaseViewSet, viewsets.ModelViewSet):
filter_class = OrderFilter
....
在可浏览的api中,当我点击底部"过滤器"时会出现字段,然后url看起来像:
/orders/?created_at__range_0=2017-05-22&created_at__range_1=2017-05-22
并且它不起作用。我需要像
这样的东西/orders/?created_at__range=2017-05-22,2017-05-24
与整数相同:
/orders/?total_price__range=1000,2000
有人对此进行了描述here。
我做错了什么?
答案 0 :(得分:4)
首先,您已将total_price
作为字段名称,但您的网址为total_cost
。
其次,从过滤器名称中删除__range
后缀。 __
的任何内容都是Django过滤的一部分。例如,如果您在Django中查询模型的值大于您要执行的操作:
MyModel.objects.filter(price__gte=50)
注意__gte
后缀;这就是Django如何过滤修饰符。所以你的课应该是这样的:
class OrderFilter(filters.FilterSet):
total_price = filters.RangeFilter(name='total_price')
# ...
然后,您可以在查询中对该字段应用范围过滤。