# restful规范中 -请求地址中带过滤条件 # 带过滤的接口只有:查询所有 # 内置过滤类 from rest_framework.filters import SearchFilter class BookView(GenericViewSet, ListModelMixin): queryset = Book.objects.all() serializer_class = BookSerialzier filter_backends = [SearchFilter] # 支持这种搜索 # # http://127.0.0.1:8000/api/v1/books/?search=红 # search_fields = ['name'] #http://127.0.0.1:8000/api/v1/books/?search=11 只要name或price中带11都能搜出来 search_fields = ['name','price'] # 第三方过滤类 ### 2.1 第三方过滤类 # pip3 install django-filter from django_filters.rest_framework import DjangoFilterBackend class BookView(GenericViewSet, ListModelMixin): queryset = Book.objects.all() serializer_class = BookSerialzier filter_backends = [DjangoFilterBackend] # http://127.0.0.1:8000/api/v1/books/?name=红楼梦&price=45 # 按名字和价格精准匹配 filterset_fields = ['name', 'price'] # 自定义过滤类 价格再100----200之间的图书 from .filter import MyFilter class BookView(GenericViewSet, ListModelMixin): queryset = Book.objects.all() serializer_class = BookSerialzier filter_backends = [MyFilter] # 必须配合一个过滤类 from rest_framework import filters from django.db.models import Q class MyFilter(filters.BaseFilterBackend): def filter_queryset(self, request, queryset, view): # 返回的数据,就是过滤后的数据 # http://127.0.0.1:8000/api/v1/books/?price=44&name=红楼梦 按名字或价格 price = request.query_params.get('price') name = request.query_params.get('name') queryset = queryset.filter(Q(name=name) | Q(price=price)) return queryset # 过滤和排序可以一起使用
drf-----过滤
最新推荐文章于 2024-05-19 23:31:32 发布