如何在 Django REST Framework 中对日期和数字进行范围过滤?其他过滤器(lt、gt 等)工作正常.我尝试了许多变体,例如:
How can I do a range filter for dates and number in Django REST Framework? Other filters (lt, gt etc.) work fine. I tried many variants such as:
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 看起来像:
In the browsable api there are to fields when I click on bottom "Filters", Then url looks like:
/orders/?created_at__range_0=2017-05-22&created_at__range_1=2017-05-22它不起作用.我需要类似的东西
and it doesn't work. I need something like
/orders/?created_at__range=2017-05-22,2017-05-24与整数相同:
/orders/?total_price__range=1000,2000here 进行了描述.
我做错了什么?
推荐答案首先,您的字段名称为 total_price,但您的 URL 显示为 total_cost.
First, you've got total_price as your field name but you're URL says total_cost.
其次,从过滤器名称中删除 __range 后缀.任何带有 __ 的东西都是 Django 过滤的一部分.例如,如果您在 Django 中查询模型的值大于您所做的:
Second, remove the __range suffix from your filter names. Anything with __ is part of the Django filtering. For example, if you were querying a model in Django for a value greater than something you'd do:
MyModel.objects.filter(price__gte=50)注意 __gte 后缀;这就是 Django 过滤修饰符的方式.所以你的类应该是这样的:
Note the __gte suffix; That's how Django does filter modifiers. So your class should be something like:
class OrderFilter(filters.FilterSet): total_price = filters.RangeFilter(name='total_price') # ...然后您可以在查询中对该字段应用范围过滤.
Then you can apply range filtering on that field in the query.
更多推荐
Django REST 框架范围过滤器
发布评论