1

I have a very simple APIView, but I don't know how to setup pagination here. In this scenario I create a CustomPagination.

pagination_class = CustomPagination works OK when I define queryset at the beginning in generics.ListAPIView, for ex. queryset = Event.objects.all() but not with 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

satyajitbarik
  • 73
  • 1
  • 7

1 Answers1

1

your views.py should look like this:

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)

Why are you using this: if it is done automatically by serializer

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})
Bishnu Sharma
  • 143
  • 1
  • 9