过滤组件的使用
有两种使用方式
方式一:使用drf内置过滤类
第一步:保证视图类继承 GenericAPIView 及其子类
# 以图书类为例 class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer
第二步:导入过滤类的相关模块
from rest_framework.filters import SearchFilter
第三步:在类中配置属性
filter_backends = [SearchFilter] # search_fields = ['name'] # 既能按名字,又能按价格 search_fields = ['name', 'price']
完整代码如下:
class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [SearchFilter] search_fields = ['name', 'price']
第四步:前端访问方式
搜索方式固定——必须是?search=xx
ttp://127.0.0.1:8000/api/v1/books/?search=1 只要名字或price中有1关键字,都能搜出来
缺点:自带模块不支持 name=西游记&price=33 这种过滤方式,因此我们可以借助第三方模块
方式二:使用第三方 django-filter 过滤类
第一步:下载django-filter模块
pip3 install django-filter
第二步:导入模块
from django_filters.rest_framework import DjangoFilterBackend
第三步:视图类配置使用
class BookView(ViewSetMixin, ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [DjangoFilterBackend] filterset_fields = ['name', 'price']
第四步:前端访问
http://127.0.0.1:8000/api/v1/books/?name=西游记&price=11 #支持同时查询书名为西游记并且价格为11 的图书
标签:search,name,price,filter,过滤,组件,class From: https://www.cnblogs.com/wellplayed/p/17932874.html