from rest_framework.viewsets import ModelViewSet from .serializers import SerializerStudent from rest_framework.response import Response from django.http import Http404 from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import FilterSet from django_filters import rest_framework from rest_framework.filters import SearchFilter,OrderingFilter from . models import Student from rest_framework.pagination import PageNumberPagination class MyPagiNation(PageNumberPagination): """ 局部分页类""" page_size_query_param = "page_size" max_page_size = 3 class MyFilter(FilterSet): """自定义过滤规则类""" class_id=rest_framework.NumberFilter(field_name="class_id",lookup_expr="exact") name=rest_framework.CharFilter(field_name="name",lookup_expr="icontains") class Meta: model=Student fields=("id","class_id","name") class StudentModelView(ModelViewSet): queryset = Student.objects.filter(is_delete=False).all() serializer_class = SerializerStudent def destroy(self, request, *args, **kwargs): try: instance = self.get_object() instance.is_delete = True instance.save() serializer=self.get_serializer(instance=instance) data= True if serializer.data.get("is_delete") else False return Response(data=data) except Http404: return Response(data=False) filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter) #自定义过滤rule filter_class =MyFilter # 如果要允许对某些字段进行过滤,可以使用filter_fields属性 #filter_fields=() # 搜索过滤 search_fields = ('name') # 排序 ordering_fields =["-class_id"] # 分页类 pagination_class = MyPagiNation
修改settings.py 配置过滤器:
REST_FRAMEWORK={ 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend',], }