zoukankan      html  css  js  c++  java
  • 分页 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',],
    
    }
    

      

  • 相关阅读:
    测试发帖
    C# 四舍五入算法(转)
    赚钱,爱好,生活
    c# 当前dll目录
    BlogWriter
    调用com+时,提示 0x800706f7,error msg:占位程序接收到错误数据,(本地调用时提示:不支持此接口)
    测试2
    系统架构设计 & 避免循环引用(转载)
    Visual Studio 2008查找替换用的正则
    Myeclipse webinf/lib包加载问题
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/13874344.html
Copyright © 2011-2022 走看看