zoukankan      html  css  js  c++  java
  • 【转】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
  • 相关阅读:
    Poly2Tri介绍[转]
    Threejs 开发3D地图实践总结【转】
    cesium and three.js【转】
    Three.js中如何显示帧速【转】
    Cesium学习笔记(七):Demo学习(自由控制飞行的飞机)[转]
    cesium原理篇(三)--地形(1)【转】
    cesium原理篇(二)--网格划分【转】
    Cesium原理篇:3D Tiles(1)渲染调度【转】
    shell脚本监控阿里云专线网络状态,若不通通过触发阿里云的进程监控报警
    jstat命令总结
  • 原文地址:https://www.cnblogs.com/yoyo008/p/14605614.html
Copyright © 2011-2022 走看看