zoukankan      html  css  js  c++  java
  • django rest framework 过滤 lim分页

    一.过滤

    1.首先引用diango 自带的过滤配置

    2.导入模块

    from django_filters.rest_framework import DjangoFilterBackend
    from django_filters import rest_framework as filters

    3.一种简单的过滤:

    class BookView(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    
        filter_backends = (DjangoFilterBackend,)
        filter_fields = ('title', 'price')

    通过在浏览器后面带上?price=100, 就可以精确过滤

    自定义过滤

    通过自己创建的过滤类来实现自定义过滤

    class ProductFilter(filters.FilterSet):
        # 最小
        min_price = filters.NumberFilter(field_name="price", lookup_expr="gte")
        # 最大
        max_price = filters.NumberFilter(field_name="price", lookup_expr="lte")
        # 包含
        name = filters.CharFilter(field_name="title", lookup_expr="icontains")
        # 通过?字段自定义过滤
        class Meta:
            model = Book
            fields = ["min_price", "max_price", "name"]

    BookViews

    class BookView(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    
        filter_backends = (DjangoFilterBackend,)
        # 自定义过滤类
        filter_class = ProductFilter

     LimitOffset分页

    引入模块

    from rest_framework.pagination import LimitOffsetPagination

    输入代码

    class P1(LimitOffsetPagination):
        max_limit = 3
        default_limit = 2
        # 从offset开始访问的下几个
        limit_query_param = "limit"
        # 定义从表中的offset开始计算
        offset_query_param = "offset"
    
    
    class IndexView2(APIView):
        def get(self, request, *args, **kwargs):
            user_list = Book.objects.all()
            p1=P1()
            page_user_list = p1.paginate_queryset(queryset=user_list, request=request, view=self)
            print("打印的数据", page_user_list)
            ser = BookSerializer(instance=page_user_list, many=True)
            # return Response(ser.data)
            # 自带分页
            return p1.get_paginated_response(ser.data)
    
    
    
    class BookView(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    
        filter_backends = (DjangoFilterBackend,)
        # 自定义过滤类
        filter_class = ProductFilter
    
        filter_fields = ('title', 'price')
        # pagination_class = MyPageNumberPagination
    
        # authentication_classes = [UserAuth]
        # permission_classes = [UserPerm]
  • 相关阅读:
    Swift5.3 语言参考(八) 模式
    Swift5.3 语言参考(七) 属性
    Swift5.3 语言参考(六) 声明
    Swift5.3 语言参考(五) 语句
    Swift5.3 语言参考(四) 表达式
    Swift5.3 语言参考(三) 类型
    Swift5.3 语言参考(一) 关于语言参考
    有效率的会议方式
    有效率的会议方式
    高中生活--第5篇--学英语的故事(四大难题)
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10117613.html
Copyright © 2011-2022 走看看