这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
过滤
过滤的安装
过滤功能不是django rest_framwork内置的,需要安装第三方的包
pip install django-filter
注意:django-filter只能运行在django2.2版本及以上,如果你的电脑上装的django版本低于2.2版本,在安装django-filter的时候,会自动卸载电脑上的django重新安装最新版本的django及django-filter
过滤的基本使用
过滤就是在获取到全部信息的前提下对结果进行过滤,因此视图类只需要实现获取全部数据的功能即可,即视图类继承ListAPIView
即可。
过滤的方式是在路由 ?字段=过滤条件
注意:
只有继承了GenericAPIView或者其他继承了GenericAPIView的子类或者需要搭配GenericAPIView的扩展类使用过滤才会有效果。如果自己在视图类中定义了获取所有数据的方法,由于内部没有filter_queryset方法就会导致filter不起作用。
- 需要注册应用
1 | python复制代码INSTALLED_APPS = [ |
- 全局配置/局部配置
1 | python复制代码# 全局配置 |
- 在视图中添加filter_fields属性,指定可以过滤的字段
1 | python复制代码class StudentListView(ListAPIView): |
代码实例
- 全局配置
1 | python复制代码'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], |
- 视图类
1 | python复制代码from rest_framework.generics import ListAPIView |
排序
对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。
使用方法:
在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter
过滤器,REST framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。
前端可以传递的ordering参数的可选字段值需要在ordering_fiel ds中指明。
1 | python复制代码class StudentListView(ListAPIView): |
如果需要在过滤以后再次进行排序,则需要两者结合!
1 | python复制代码from rest_framework.generics import ListAPIView |
结语
文章首发于微信公众号程序媛小庄,同步于掘金。
码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)
本文转载自: 掘金