使用DRF的APIView创建分页时遇到问题。我在某些地方看到用APIView进行分页并不是那么简单,下面的代码是在我的搜索中得到的,但是,我仍然遇到麻烦。其中之一就是我不知道如何为每个请求传递最少数量的结果。另一个是页面编号没有出现或者后面有下一页。
class MerchantOrders(APIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get(self, request, pk):
orders = Order.objects.filter(merchant_id=pk)
paginator = LimitOffsetPagination()
result_page = paginator.paginate_queryset(orders, request)
response = ListOrderSerializer(result_page, many=True)
return Response(response.data)
这是一个回归的例子
[
{
"product": {
"id": 4,
"name": "Blusa #889",
"barcode": "8880",
"description": "Maecenas vestibulum imperdiet dapibus. Proin semper tortor lectus, nec lacinia felis fringilla et."
},
"price": "16.00",
"is_ative": true
},
{
"product": {
"id": 5,
"name": "Blusa #915",
"barcode": "4238",
"description": "Donec euismod pulvinar condimentum."
},
"price": "12.00",
"is_ative": true
}
我不知道这是否正常,因为我使用过LimitOffsetPagination或者我做错了。我问如果您有更好的使用APIView进行分页的解决方案,请随时与我分享。
答案 0 :(得分:1)
Django REST框架源代码是你的朋友。 在您的情况下,您可以从list implementation:
中看到一些部分def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)