Django REST 框架范围过滤器

编程入门 行业动态 更新时间:2024-10-10 13:21:58
本文介绍了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 框架范围过滤器

本文发布于:2023-10-12 04:10:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1483684.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:过滤器   框架   Django   REST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!