drf——drf过滤,排序功能,

一、内置和第三方django-filter过滤功能

1 过滤:筛选查询结果
2 内置筛选的使用
    -在视图类中配置
        filter_backends =[SearchFilter,]
        search_fields=('name','age') # 表模型中的字段,表示查询name或age字段里面有需要查的,可模糊查
    -查询的时候
        http://127.0.0.1:8000/students/?search=e #表示查name 或 age里有e的用户信息

3 第三方扩展的过滤功能
    安装:
    -pip3 install django-filter  :注意最新版本(2.4.0)要跟django2.2以上搭配  -django-filter有很多功能,比如:模糊查询以什么开头,结尾,这个或那个等高级功能,后面会说。
    使用:
    -在视图类中配置
        filter_backends =[DjangoFilterBackend,]
        filter_fields=['name','age'] #精准过滤,表示查看name为xx,age为xx的用户,也可写一个name 或age
    -查询的时候
        http://127.0.0.1:8000/students/?name=lqz#查name=lqz的用户
        http://127.0.0.1:8000/students/?age=18#查age=18的用户
        http://127.0.0.1:8000/students/?name=lqz&age=18#查name=lili并且age=18的用户

二、自定制过滤器

#源码分析:
-查询所有才会有过滤---》list才需要过滤---》queryset = self.filter_queryset(self.get_queryset())---》GenericAPIView-->filter_queryset

        def filter_queryset(self, queryset):
            for backend in list(self.filter_backends):
                queryset = backend().filter_queryset(self.request, queryset, self)
            return queryset

自己编写

也可以再基于django-filter扩写,使得功能更强大

1 写一个类MyFilter,继承BaseFilterBackend
2 重写filter_queryset方法,在该方法内部进行过滤(自己设置的过滤条件)
3 返回queryset对象(过滤后的queryset对象)
4 配置在视图类中
    filter_backends = [MyFilter,]  #如果是一个类可以直接写成filter_backends = MyFilter,因为源码里面自己会list一下,变成列表

代码实现:

二、排序功能

-在视图类中配置
    filter_backends =[OrderingFilter,]
    ordering_fields=['id','age']
-查询的时候
    http://127.0.0.1:8000/students/?ordering=age #按age排
    http://127.0.0.1:8000/students/?ordering=-id#按-id排
    http://127.0.0.1:8000/students/?ordering=-age,-id #当要排序的用户age相同时,按照-id排,是有意义的,要考虑实际应用

 ### 过滤后再排序
  -在视图类中配置
    filter_backends = [OrderingFilter,DjangoFilterBackend]
    ordering_fields = ('id', 'age')
    filter_fields=['name','age']
  -查询的时候
    http://127.0.0.1:8000/students/?name=lqz&age=19&ordering=-age,-id #筛选出name=lqz并且age=19的用户,然后按照-age排,如果age再相同,按照-id排
(0)

相关推荐

  • django orm 常用查询筛选

    django orm 常用查询筛选 本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不 ...

  • ModelViewSet+ModelSerializer使用

    ModelViewSet+ModelSerializer使用

  • Django学习笔记

    初始Django Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发.Django是一个开放源代码的 Web 应用框架,由Python写成.采用了 MVT 的软件 ...

  • Django Full Coverage(飞速入门)

    Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...

  • python测试开发django-75.ORM根据日期查询(__range)

    前言 在使用django的 ORM 查询时候,我想查询最近3天的数据,需根据日期查询某一段时间的数据 时间筛选方式 可以根据 year.month.day.week_day 查询对应时间的记录 比如我 ...

  • python测试开发django-78.ORM查询之extra

    前言 Django 的查询语法难以简单的表达复杂的 WHERE 子句,对于对于这种情况, Django 提供了 extra() 方法. extra() 能在 QuerySet 生成的SQL从句中注入新 ...

  • drf—— drf的请求与响应

    一.Request #常用属性 -data :前端以post请求提交的数据都在它中 -FILES :前端提交的文件 -query_params:就是原来的request.GET -重写了 __geta ...

  • 通达信“历史行情指标排序”功能高级设置技巧(图解)

    今天的主要内容是与大家分享软件中的各类报表分析功能. 目录: 板块分析(.400) 历史行情指标排序(.401) 强弱分析(.402) 区间涨跌幅度.区间换手排名.区间量变幅度.区间震荡幅度(.403 ...

  • 通达信的指标排序功能讲解,让发现黑马更轻松(附强势股公式)

    今天讲给你看价格的用途. 因为这个知识属于常识性的问题,前面我就没说了,今天把它拿出来单独说一下,主要是我有个猜想,可能不少人没有明白是怎么被套的. 在街头,我们经常遇到这种情况,有些商铺门口写着&q ...

  • 【Excel数据处理技巧】Excel排序功能

    详细介绍Excel中的排序

  • 利用排序功能制作工资条(不用函数)

    利用排序功能制作工资条(不用函数) 第一节讲了使用函数法将工资表转化为工资条,有人可能会说我的函数学的不好,有没有不使用函数的方法呢? 还真有!Excel强大的功能一定能做到的!现在就给大家讲讲不用函 ...

  • Excel数据透视表如何将自动排序功能关闭?

    Excel数据透视表如何将自动排序功能进行关闭?在数据透视表中编辑的时候经常会自动进行排序比较麻烦,我们可以将这个功能进行关闭,下面来看看吧. 1.首先我们看到在进行编辑的时候数据会自动进行排序. 2 ...

  • 微博这一功能回归竟让数亿用户泪目,时间线排序功能如此重要?

    将「雷科技Lite」收藏为我的小程序,不再错过精彩内容 尽管有些人说微博已经"过气",但不得不承认的是,这依然是一个月活跃用户接近 5 亿.为公司带来百亿营收的超级平台.微博已成为 ...

  • 使用MindManager的过滤主题功能查看感兴趣的主题

    MindManager是一款多功能思维导图工具软件.但有的思维导图繁杂,用户只需要查看自己感兴趣的主题该怎么办呢?接下来,我就为大家详细介绍MindManager思维导图的过滤主题功能,可以实现用户的 ...

  • 巧用排序功能实现隔行插入!

    大象 前言 隔行插入看似简单的操作,如果不能灵活运用,仍会陷于手动逐行插入的悲催境地.如下图所示,要在每一行下面插入一行,作为英文版的翻译,如何去做?也许这个问题大家根本就没有想过,就是一行一行的插入 ...