分頁 restframe work 排序,分頁,自定義過濾
阿新 • • 發佈:2020-10-25
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',], }