在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的过滤器类,并在其中创建了一个数值过滤器quantity。field_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的记录。
