• DRF的过滤与排序


    • 过滤

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

    pip install django-filter

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

    INSTALLED_APPS = [
        ...
        'django_filters',  # 需要注册应用,
    ]
    • 全局配置

    在settings文件中配置:

    REST_FRAMEWORK = {
        'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)  # 全局配置,对全部视图的查询多条接口都有过滤功能,但是视图里要指定字段
    }

    视图中指定要过滤的字段:

    class EmployeeViewSet(ModelViewSet):
        queryset = Employee.objects.all()
        serializer_class = EmployeeSerializer
        # 指定可以根据哪些字段进行列表数据的过滤
        filter_fields = ('gender', 'department')

     

    • 针对某个视图进行过滤(比较常用)

    class EmployeeViewSet(ModelViewSet):
        queryset = Employee.objects.all()
        serializer_class = EmployeeSerializer
    
        # 指定过滤器
        filter_backends = [DjangoFilterBackend]
        # 指定可以根据哪些字段进行列表数据的过滤
        filterset_fields = ('gender', 'department')
    • 使用

    访问127.0.0.1/employees?gender=1时可以过滤出性别字段是1的数据。

    ===================================================================================================================================

    • 排序

    对于列表数据,REST framework 提供了 OrderingFilter 过滤器 来实现按指定字段进行排序的功能

    使用方法:

    • 在类视图中设置filter_backends,使用 rest_framework.filters.OrderingFilter(自带的模块,导包时注意) 过滤器:REST framework会在请求的查询字符串参数中检查是否包含了 ordering 参数,如果包含,则按照 ordering 参数指定的字段对数据集进行排序。
    • 在类视图中指定 ordering_fields属性,表示前端请求列表数据时,可以通过哪些字段进行排序

    设置示例:

    class EmployeeViewSet(ModelViewSet):
    
        queryset = Employee.objects.all()
        serializer_class = EmployeeSerializer
    
        # 新增排序的过滤器
        filter_backends = [..., OrderingFilter]
        # 指定可以根据哪此字段进行排序
        ordering_fields = ('age', 'salary')

    使用示例:

    访问127.0.0.1/employees/?ordering=age(年龄升序)

    访问127.0.0.1/employees/?ordering=-age(年龄降序)

    访问127.0.0.1/employees/?ordering=age,-salary(先安装年龄升序来排,如果年龄一样,按工资升序来排)

  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/chichung/p/9945295.html
Copyright © 2020-2023  润新知