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]
原文地址:https://www.cnblogs.com/zhangqing979797/p/10117613.html