如何在 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 https://github.com/philipn/django-rest-framework-filters#caveats--limitations .
我究竟做错了什么?
首先,你有total_price
作为你的字段名称,但你的 URL 说total_cost
.
其次,删除__range
过滤器名称的后缀。任何与__
是 Django 过滤的一部分。例如,如果您在 Django 中查询模型的值大于您执行的操作:
MyModel.objects.filter(price__gte=50)
请注意__gte
后缀;这就是 Django 过滤修饰符的方式。所以你的类应该是这样的:
class OrderFilter(filters.FilterSet):
total_price = filters.RangeFilter(name='total_price')
# ...
然后您可以在查询中对该字段应用范围过滤。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)