【转】Django-drf-第三方过滤排序功能

转自 https://zhuanlan.zhihu.com/p/291842599

Django-drf-第三方过滤排序功能

 
 

Ⅰ 内置过滤功能 -- SearchFilter

过滤:筛选查询结果

在视图类中配置

from rest_framework.filters import SearchFilter  # 导入模块
 
class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    # 筛选功能
    filter_backends = [SearchFilter, ]  # 局部使用配置
    search_fields = ('name',)  # 筛选的字段

访问方式 -- search关键字传筛选条件

http://127.0.0.1:8000/students/?search=wot   

Ⅱ 第三方拓展的过滤功能 -- DjangoFilterBackend

借助于django-filter

  • 注意:最新版本(2.4.0)要跟django2.2以上搭配

在视图类中配置

from django_filters.rest_framework import DjangoFilterBackend

class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    # 筛选功能
    filter_backends = [DjangoFilterBackend, ]   # 第三方的筛选类
    filter_fields = ['name',]         # 只查询name字段,精准匹配
    filter_fields = ['name', 'age']   # 查询name字段和age字段,精准匹配

访问方式 -- (name)字段名关键字传筛选条件

http://127.0.0.1:8000/book/?name=wot&age=13   # 多个查询条件
http://127.0.0.1:8000/book/?name=wot          # 单个查询条件

Ⅲ 排序功能 -- OrderingFilter

根据指定字段对查询结果进行排序

在视图类中配置

from rest_framework.filters import OrderingFilter

class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    # 排序功能
    filter_backends = [OrderingFilter, ]
    ordering__fields = ['id', ]  # 这里是id,访问时同样可以传入age进行排序

访问方式 -- ordering关键字传筛选条件

http://127.0.0.1:8000/book/?ordering=-id   # 以id倒序排列,传表模型字段
http://127.0.0.1:8000/book/?ordering=-age  # 以年龄倒序排列,视图类未设置,同样由效

Ⅳ 筛选后排序 -- DjangoFilterBackend, OrderingFilter

先以什么什么筛选 or 以什么什么排序再进行筛选

先筛选后排序

在视图类中配置

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter

class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    # 筛选功能
    filter_backends = [DjangoFilterBackend,OrderingFilter ]
    filter_fields = ['name', ]

    # 排序功能
    ordering__fields = ['id', ]

访问方式 -- name=筛选条件&ordering=排序字段

http://127.0.0.1:8000/book/?name=wot&ordering=age
原文地址:https://www.cnblogs.com/yoyo008/p/14605614.html