转自 https://zhuanlan.zhihu.com/p/291842599
过滤:筛选查询结果
在视图类中配置
from rest_framework.filters import SearchFilter # 导入模块
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 筛选功能
filter_backends = [SearchFilter, ] # 局部使用配置
search_fields = (‘name‘,) # 筛选的字段
访问方式 -- search关键字传筛选条件
http://127.0.0.1:8000/students/?search=wot
借助于django-filter
在视图类中配置
from django_filters.rest_framework import DjangoFilterBackend
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 筛选功能
filter_backends = [DjangoFilterBackend, ] # 第三方的筛选类
filter_fields = [‘name‘,] # 只查询name字段,精准匹配
filter_fields = [‘name‘, ‘age‘] # 查询name字段和age字段,精准匹配
访问方式 -- (name)字段名关键字传筛选条件
http://127.0.0.1:8000/book/?name=wot&age=13 # 多个查询条件
http://127.0.0.1:8000/book/?name=wot # 单个查询条件
根据指定字段对查询结果进行排序
在视图类中配置
from rest_framework.filters import OrderingFilter
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 排序功能
filter_backends = [OrderingFilter, ]
ordering__fields = [‘id‘, ] # 这里是id,访问时同样可以传入age进行排序
访问方式 -- ordering关键字传筛选条件
http://127.0.0.1:8000/book/?ordering=-id # 以id倒序排列,传表模型字段
http://127.0.0.1:8000/book/?ordering=-age # 以年龄倒序排列,视图类未设置,同样由效
先以什么什么筛选 or 以什么什么排序再进行筛选
先筛选后排序
在视图类中配置
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
# 筛选功能
filter_backends = [DjangoFilterBackend,OrderingFilter ]
filter_fields = [‘name‘, ]
# 排序功能
ordering__fields = [‘id‘, ]
访问方式 -- name=筛选条件&ordering=排序字段
http://127.0.0.1:8000/book/?name=wot&ordering=age
原文:https://www.cnblogs.com/yoyo008/p/14605614.html