restframework中过滤器的使用

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, ]
posted @ 2022-03-28 00:04  recordlife  阅读(254)  评论(0编辑  收藏  举报