如何在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,2000它被描述为此处。
我在做什么错了?
推荐答案首先,您获得了总价作为您的字段名称,但您的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框架范围过滤器
发布评论