一、过滤

  1、需要另外安装django的过滤模块:pip install django-filter。

  2、需要在setting.py中注册。

  3、配置过滤器:

    ①全局配置,setting.py中:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

    ②局部配置,视图类中:

filter_backends:[DjangoFilterBackend,]

  4、设置过滤字段,视图类中:

filter_fields = ('name','age')

  5、使用:.../?name=xxx,可以使用设置了的过滤字段的一个或多个。

  6、自定义过滤器:

    ①创建过滤器:

from rest_framework.filters import BaseFilterBackend


class MyFilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        # 书写过滤规则
        filter_key = request.query_params.get('filter_key')
        queryset = queryset.filter(filter_key=filter_key)
        return queryset

    ②视图类中配置同内置的。

    ③使用:.../?filter_key=xxx

  7、区间过滤:

    ①自定义过滤类:

class CourseFilterSet(FilterSet):
    # 设置关联字段,区间的上下限
    min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')
    max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')

    class Meta:
        model = models.Course
        # 用于过滤的字段
        fields = ['course_category']

    ②视图中:

# 配置字段过滤器
filter_backends = [DjangoFilterBackend]
# 因为过滤器中已经声明了字段,所以直接配置区间过滤器即可,不用另外配置区间字段
filter_class = CourseFilterSet

    ③使用:.../?course_category=1&min_price=30&max_price=60

二、排序

  1、全局配置排序器,setting.py中:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.OrderingFilter',)
}

  2、局部配置排序器,视图类中:

filter_backends:[OrderingFilter,]

  3、设置排序字段,视图类中:

ordering_fields = ('id', 'age')

  4、使用:.../?ordering=id,此为正序排列,写成<-id>,为反序,可以使用设置了的排序字段的任意一个。

三、过滤器和排序器可以一起使用,先过滤再排序。

 

posted on 2020-05-22 09:01  焚音留香  阅读(207)  评论(0编辑  收藏  举报