Django Rest 框架 - APIView 分页 [英] Django Rest Framework - APIView Pagination
本文介绍了Django Rest 框架 - APIView 分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个非常简单的APIView
,但我不知道如何在这里设置分页.在这个场景中,我选择了一个带有给定 pk
的 Event
,然后我得到了分配给这个 Event
的所有 NewsItems
.
I have a very simple APIView
, but I don't know how to setup pagination here.
In this scenario I select an Event
with given pk
, then I get all the NewsItems
assigned to this Event
.
pagination_class = LimitOffsetPagination
工作正常,例如.queryset = Event.objects.all()
但不使用自定义 get
:
pagination_class = LimitOffsetPagination
works OK when I define queryset at the beginning in ListCreateAPIView
, for ex. queryset = Event.objects.all()
but not with custom 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
推荐答案
另一个选择是从分页类继承,对视图类进行较少的更改:
Another option would be inheriting from the pagination class, with fewer changes on the view class:
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)
这篇关于Django Rest 框架 - APIView 分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文