博客
关于我
DRF框架(十四)——过滤Filtering,排序
阅读量:705 次
发布时间:2019-03-21

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

Django数据过滤与排序实例详解

在Django开发过程中,对列表数据进行过滤和排序是非常常见的需求。Django REST框架提供了一些强大的工具来实现这一点,以下我们将分享一些实用的配置方法和使用技巧。

一、过滤(Filtering)

当你需要根据特定字段对数据进行过滤时,Django的django-filters扩展会帮到你。通过在项目中安装相应的包,然后在配置文件中进行相应的设置,你可以轻松地对API视图添加过滤功能。

  • 首先,确保django_filters已经安装:
    pip install django-filter
  • 打开你的settings.py文件,找到INSTALLED_APPS数组,添加'django_filters'
    INSTALLED_APPS = [   ...   'django_filters',   ...]
  • 然后在REST_FRAMEWORK配置中启用Django Filter的后端:
    REST_FRAMEWORK = {   'DEFAULT_FILTER_BACKENDS': (      'django_filters.rest_framework.DjangoFilterBackend',   ):}
  • 接下来,设置你的视图类,添加filter_fields属性,指定可以用于过滤的字段。例如,可以指定btitlebread字段:
    class BookListView(ListAPIView):   queryset = BookInfo.objects.all()   serializer_class = BookInfoSerializer   filter_fields = ('btitle', 'bread')
  • 使用时,可以通过URL params来指定过滤条件。例如:
    http://127.0.0.1:8000/books/?btitle=西游记
  • 二、排序(Sorting)

    当你需要对列表数据进行排序时,REST framework提供了OrderingFilter过滤器。以下是如何使用它的步骤:

  • 在你的视图类中,导入OrderingFilter
    from rest_framework.filters import OrderingFilterclass BookListView(ListAPIView):   ...   filter_backends = [OrderingFilter]   ordering_fields = ('id', 'bread', 'bpub_date')
  • 配置ordering_fields,指定需要支持排序的字段。比如,可以指定idbreadbpub_date字段:
    ordering_fields = ('id', 'bread', 'bpub_date')
  • 需要注意的是,排序参数是通过请求的查询字符串传递的,例如:
    http://127.0.0.1:8000/books/?ordering=-bread

    这里的-bread表示以bread字段的降序进行排序。

  • 关键点回顾

    • 过滤:使用filter_fields属性指定要过滤的字段,通过URL参数传递过滤条件。
    • 排序:启用OrderingFilter后,可以通过URL参数指定排序字段和方向,实现自定义排序。
    • 配置文件:需要在settings.py中启用django_filters和相应的REST framework过滤器后端。

    通过以上配置,你可以轻松地对列表数据进行过滤和排序,从而提升API的灵活性和实用性。

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

    你可能感兴趣的文章
    python:input
    查看>>
    python:字符串
    查看>>
    cobaltstrike生成一个原生c,然后利用xor加密解密执行
    查看>>
    HTML中如何给HTML元素添加事件
    查看>>
    IDEA springMVC不报错出现访问404问题
    查看>>
    Redis概述和基础
    查看>>
    SSH整合的404错误
    查看>>
    wpf 使用Font Awesome
    查看>>
    阿里云Windows服务器+PHPStudy+apache 如何部署SSL证书
    查看>>
    c++11:std::declval、decltype
    查看>>
    Windows10:远程桌面连接报错“出现身份验证错误。要求的函数不受支持”
    查看>>
    Golang: ,ok模式
    查看>>
    C++ 错误:“xxx” does not name a type
    查看>>
    找不到自己Win10的Linux子系统的根目录?在这里哟!
    查看>>
    redis的发布和订阅
    查看>>
    lettcode 221. 最大正方形
    查看>>
    112. 路径总和(Javascript)
    查看>>
    G1 如何做到可预测的停顿和G1 垃圾收集器入门
    查看>>
    Tomcat启动报404(eclipse)
    查看>>
    0X3协议与数据包
    查看>>