1.内置的过滤器使用
- 过滤针对于list,获取所有的时候使用,使用的方法就是在请求的路径中加过滤条件,对结果进行过滤
- 使用的方法
- 视图类中必须继承GenericAPIView
- 在视图类中进行以下拍配置
#配置过滤类
filter_backends=[SearchFilter,]
# 配置过滤字段
search_fields=['name','price']
#查询的时候,所有条件都给search,并支持模糊匹配
http://127.0.0.1:8000/api/book/?search=黑楼梦
http://127.0.0.1:8000/api/book/?search=黑楼梦
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}
2.第三方过滤器使用
- 第三方应用下载(支持django:2.2, 3.1, 3.2及以上版本)
pip install django-filter
INSTALLED_APPS = ['django_filters']
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend')
}
- 在视图中添加filter_fields属性,指定可以过滤的字段
class StudentListView(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
filter_backends=[DjangoFilterBackend,]
# 配置过滤字段
filter_fields=['name','price']
# 127.0.0.1:8000/four/students/?sex=1
3.自定义过滤器使用
from rest_framework.filters import BaseFilterBackend
class Myfilter(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
name = request.GET.get('name')
queryset = queryset.filter(name__contains=name)
return queryset
filter_backends = [Myfilter, ]