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]
  • 相关阅读:
    Linux压缩和解压缩命令(linux必学基础)
    Windows Server 2012 忘记登录密码怎么办?
    linux双网卡双网关设置
    date命令的帮助信息,使用date命令输出数字做为命名标题则不会有重复标题
    linux中history加入显示时间命令代码
    the MTS failed last time时的解决办法
    linux tar.gz zip 解压缩 压缩命令
    如果centos7添加新网卡,系统不识别的解决办法
    Linux常用命令英文全称与中文解释 (pwd、su、df、du等)
    使用动态规划算法解释硬币找零问题
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10117613.html
Copyright © 2011-2022 走看看