排序只在查询所有的功能接口中使用,对查询的结果进行排序(升序、降序)
REST framework 提供了 OrderingFilter 过滤器来帮助我们快速指明数据按照指定字段进行排序
导入语句:from rest_framework.filters import OrderingFilter
使用
视图类必须是继承了 GenericAPIView filter_backends = [OrderingFilter, ] # 引入过滤器
ordering_fields = ['price', 'id'] # 按照指定字符排序
# 按price升序
http://127.0.0.1:8000/api/v1/books?ordering=price
# 按price降序,负号表示降序
http://127.0.0.1:8000/api/v1/books?ordering=-price
# 先按价格升序排,若价格一样,再按id升序排
http://127.0.0.1:8000/api/v1/books?ordering=price,id
过滤是指查找出符合指定要求的数据。
该内置的过滤是模糊查询,但是不能指定查询字段,
导入语句:from rest_framework.filters import SearchFilter
使用
视图类必须是继承了 GenericAPIView filter_backends = [SearchFilter, ] # 引入过滤器
search_fields = ['price', 'id'] # 按照指定字符查找
http://127.0.0.1:8000/api/v1/books?search=11 # 相当于在上面指定的price和id中模糊查找
该过滤器属于第三方过滤器,需要手动下载:pip3 install django-filter
下载好后导入语句:from django_filters.rest_framework import DjangoFilterBackend
使用
视图类必须是继承了 GenericAPIView filter_backends = [DjangoFilterBackend, ] # 引入过滤器
filter_fields = ['price', 'id'] # 按照指定字符排序
http://127.0.0.1:8000/api/v1/books?price=123&price=11
除了以上的过滤器还可以自定义过滤器,编写自己的逻辑。
from rest_framework.filters import BaseFilterBackend
from django.db.models import Q
class MyFilter(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
q_obj = Q()
q_obj.connector = 'and'
for i in request.query_params:
j = request.query_params.get(i)
q_obj.children.append((i, j))
return queryset.filter(q_obj)