过滤组件

发布时间 2023-12-28 15:54:11作者: wellplayed

过滤组件的使用

有两种使用方式

 

方式一:使用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 的图书