Django Rest Framework - APIView 分页

新手上路,请多包涵

我有一个非常简单的 APIView ,但我不知道如何在这里设置分页。 In this scenario I select an Event with given pk , then I get all the NewsItems assigned to this Event .

pagination_class = LimitOffsetPagination 当我在开头定义查询集时工作正常 ListCreateAPIView 例如。 queryset = Event.objects.all() 但不是自定义 get

 class EventNewsItems(APIView):
    pagination_class = LimitOffsetPagination

    def get(self, request, pk, format=None):

        #user = request.user
        event = Event.objects.get(pk=pk)
        news = event.get_news_items().all()

        serializer = NewsItemSerializer(news, many=True, context={'request':request})
        response = Response(serializer.data, status=status.HTTP_200_OK)
        return response

解决了:

 def get(self, request, pk, format=None):

    #user = request.user
    event = Event.objects.get(pk=pk)
    news = event.get_news_items().all()
    paginator = LimitOffsetPagination()
    result_page = paginator.paginate_queryset(news, request)
    serializer = NewsItemSerializer(result_page, many=True, context={'request':request})
    response = Response(serializer.data, status=status.HTTP_200_OK)
    return response

原文由 user3128673 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 933
1 个回答

另一种选择是从分页类继承,对视图类的更改较少:

 from rest_framework.pagination import LimitOffsetPagination

class EventNewsItems(APIView, LimitOffsetPagination):

    def get(self, request, pk, format=None):
        event = Event.objects.get(pk=pk)
        news = event.get_news_items().all()

        results = self.paginate_queryset(news, request, view=self)
        serializer = NewsItemSerializer(results, many=True)
        return self.get_paginated_response(serializer.data)

原文由 omushpapa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题