Django REST 框架范围过滤器 [英] Django REST framework range filter

查看:38
本文介绍了Django REST 框架范围过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 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

here 进行了描述.

我做错了什么?

推荐答案

首先,您的字段名称为 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 框架范围过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆