分页 restframe work 排序,分页,自定义过滤
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',],
}


浙公网安备 33010602011771号