如何在Django自定义APIView中设置分页?

2024-06-26 14:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的APIView,但我不知道如何在这里设置分页。在这个场景中,我创建了一个自定义分页

pagination_class=CustomPagination在generics.ListAPIView开头为ex.queryset=Event.objects.all()定义queryset时工作正常,但不使用custom get:

views.py:

class ProductAPIView(APIView):
    
    def get(self, request):
        pagination_class = CustomPagination
        
        data = Product.objects.filter(status=1)
        product_serializer = ProductSerializers(data,many=True)
        productData=[]

        for record in product_serializer.data:
            value = json.dumps(record)
            temp = json.loads(value)
            _id = temp['id']
            title = temp['title']
            sub_title = temp['sub_title']
            
            productData.append({"id":_id, "title":title, "sub_title":sub_title})

        return Response({"productData":productData})


pagination.py:
from rest_framework.pagination import PageNumberPagination

class CustomPagination(PageNumberPagination):
    page_size = 1
    page_size_query_param = 'page_size'
    max_page_size = 1000


Tags: pyiddatasizegetobjectstitlepage
1条回答
网友
1楼 · 发布于 2024-06-26 14:24:27

您的views.py应该如下所示:

class ProductAPIView(APIView):
    pagination_class = CustomPagination()

    def get(self, request):
        queryset = Product.objects.filter(status=1)
        
        # for pagination
        page = self.pagination_class.paginate_queryset(queryset=queryset, request=request)
        if page is not None:
            serializer = ProductSerializers(page, many=True)
            return self.pagination_class.get_paginated_response(serializer.data)
        serializer = ProductSerializers(queryset, many=True)
        return Response(serializer.data)

你为什么要用这个: 如果它是由序列化程序自动完成的

for record in product_serializer.data:
            value = json.dumps(record)
            temp = json.loads(value)
            _id = temp['id']
            title = temp['title']
            sub_title = temp['sub_title']
            
            productData.append({"id":_id, "title":title, "sub_title":sub_title})

相关问题 更多 >