我有一个非常简单的APIView,但是我不知道如何在此处设置分页。在这种情况下,我创建一个CustomPagination。
pagination_class =例如,当我在generics.ListAPIView
的开头定义queryset时,CustomPagination工作正常。 queryset = Event.objects.all(),但不包含自定义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})
from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
page_size = 1
page_size_query_param = 'page_size'
max_page_size = 1000
答案 0 :(得分:1)
您的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})