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
  • 相关阅读:
    googleMap JsAPI
    格式化Json代码
    baidu map JSAPI
    ajaxFileUpload与KindEditor
    Intent 意图
    初识Android
    Android环境搭建
    Android入门知识梳理
    网页版计算器
    使用socket实现简单的聊天功能
  • 原文地址:https://www.cnblogs.com/yoyo008/p/14605614.html
Copyright © 2011-2022 走看看