欢迎访问宙启技术站
智能推送

在Django中使用django_filters.rest_framework的NumberFilter()进行数值过滤查询器

发布时间:2023-12-23 18:04:38

在Django中使用django_filters.rest_framework的NumberFilter()可以很方便地创建数值过滤查询器。NumberFilter()允许我们根据特定的数值条件过滤查询结果。

下面是一个简单的使用例子:

首先,确保已经安装了django_filters模块。

pip install django_filters

接下来,在Django的视图ViewSet中导入相关的模块和类:

from django_filters.rest_framework import DjangoFilterBackend
from django_filters import NumberFilter

from rest_framework import viewsets
from rest_framework.filters import SearchFilter
from .serializers import YourModelSerializer
from .models import YourModel

接着,在ViewSet中定义一个过滤器类如下:

class YourModelFilterSet(django_filters.FilterSet):
    # 使用NumberFilter()创建一个数值过滤器
    quantity = NumberFilter(field_name='quantity', lookup_expr='gte')

    class Meta:
        model = YourModel
        fields = ['quantity']

这个例子中,我们创建了一个名为YourModelFilterSet的过滤器类,并在其中创建了一个数值过滤器quantityfield_name参数指定要过滤的字段名,lookup_expr参数指定比较操作符,这里使用了gte表示大于等于的条件。

然后,将YourModelFilterSet配置到ViewSet中:

class YourModelViewSet(viewsets.ModelViewSet):
    queryset = YourModel.objects.all()
    serializer_class = YourModelSerializer
    filter_backends = [DjangoFilterBackend, SearchFilter]
    filterset_class = YourModelFilterSet

最后,使用过滤器来进行查询,可以通过URL传递查询参数进行过滤。例如,要查询quantity大于等于100的记录,可以使用如下URL进行查询:

http://localhost:8000/yourmodels/?quantity__gte=100

上述URL中的quantity__gte=100表示过滤quantity字段大于等于100的记录。