博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRF之过滤排序组件
阅读量:3961 次
发布时间:2019-05-24

本文共 1693 字,大约阅读时间需要 5 分钟。

一. 过滤Filtering

对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。

pip install django-filter

在配置文件中增加过滤后端的设置:

INSTALLED_APPS = [    ...    'django_filters',  # 需要注册应用,]REST_FRAMEWORK = {
... 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)}

在视图中添加filter_fields属性,指定可以过滤的字段

class StudentListView(ListAPIView):    queryset = Student.objects.all()    serializer_class = StudentSerializer    filter_fields = ('age', 'sex')# 127.0.0.1:8000/four/students/?sex=1

二. 排序

对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。

使用方法:

在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。

前端可以传递的ordering参数的可选字段值需要在ordering_fields中指明。

示例:

class StudentListView(ListAPIView):    queryset = Student.objects.all()    serializer_class = StudentModelSerializer    filter_backends = [OrderingFilter]    ordering_fields = ('id', 'age')# 127.0.0.1:8000/books/?ordering=-age # 必须是ordering=某个值# -id 表示针对id字段进行倒序排序# id  表示针对id字段进行升序排序

如果需要在过滤以后再次进行排序,则需要两者结合!

from rest_framework.generics import ListAPIViewfrom students.models import Studentfrom .serializers import StudentModelSerializerfrom django_filters.rest_framework import DjangoFilterBackend #需要使用一下它才能结合使用class Student3ListView(ListAPIView):    queryset = Student.objects.all()    serializer_class = StudentModelSerializer    filter_fields = ('age', 'sex')    # 因为filter_backends是局部过滤配置,局部配置会覆盖全局配置,所以需要重新把过滤组件核心类再次声明,    # 否则过滤功能会失效    filter_backends = [OrderingFilter,DjangoFilterBackend]    ordering_fields = ('id', 'age')            # 针对的是继承的类中的list方法    # 127.0.0.1:8000/books/?sex=1&ordering=-age

转载地址:http://xgqzi.baihongyu.com/

你可能感兴趣的文章
Windows10远程报错CredSSP加密oracle修正
查看>>
Windows server 2016 设置多用户登陆
查看>>
偶然发现的面包屑
查看>>
每天自动升级你的Centos
查看>>
WDCP v3版本的小工具集
查看>>
CentOS 7 下挂载NTFS文件系统磁盘并设置开机自动挂载
查看>>
Mysql修改最大连接数&重启
查看>>
华为交换机划分vlan
查看>>
CentOS 6.6 搭建Zabbix 3.4.8 过程
查看>>
make: *** No targets specified and no makefile found. Stop.解决方法
查看>>
安装zabbix 3.4版本编译报错configure: error: Unable to use libevent (libevent check failed) 解决办法
查看>>
一行代码更改密码
查看>>
非插件实现cookie版Typecho文章阅读次数统计功能
查看>>
非插件实现Typecho语法高亮
查看>>
windows 下 netsh 实现 端口映射(端口转发)
查看>>
两个好用的命令行工具 watch 和 rsync
查看>>
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>
docker更换国内镜像
查看>>
CentOS 下 tree命令用法详解
查看>>