一、过滤
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>,为反序,可以使用设置了的排序字段的任意一个。
三、过滤器和排序器可以一起使用,先过滤再排序。