我正在使用Django Rest Framework 我有以下情况:
我有一个包含一些元素的表格(例如10k元素) 我在这个模型中也有一个独特的索引:
....
Element i-1
Element i
Element i+1
Element i+2
....
我需要一个带有以下响应的REST API:
按中心索引GITS元素: i
我需要返回一组结果,其中包含之前的 N 元素以及 i 之后的 N 元素。
使用分页可以在这组结果中导航: 使用PREV我可以请求上一页并使用NEXT我可以请求下一页... 例如:
按中心索引= i
获取元素
PREV:....
Result:
[
Element k
Element k+1
......
Element i
......
Element w
Element w+1
]
NEXT:....
答案 0 :(得分:2)
在DRF documentation on pagination中声明可以编写自定义分页方法:
要创建自定义分页序列化程序类,您应该进行子类化
pagination.BasePagination
并覆盖paginate_queryset(self, queryset, request, view=None)
和get_paginated_response(self, data)
方法:
paginate_queryset
方法传递初始查询集和 应该返回一个只包含>请求页面中的数据的可迭代对象。get_paginated_response
方法传递了序列化页面数据 并应返回响应实例
所以我们会这样做:
基本范例
from rest_framework.pagination import BasePagination
class CenterPointPagination(BasePagination):
default_center = 0
default_radius = 5
center_query_param = 'center'
radius_query_param = 'radius'
def paginate_queryset(self, queryset, request, view=None):
center = request.get(center_query_param, default_center)
radius = request.get(radius_query_param, default_radius)
start = center - radius if center - radius > 0 else 0
finish = center + radius
return list(queryset[start:finish])
def get_paginated_resposne(self, data):
return Response(OrderedDict([
'center': center,
'radius': radius,
'results': data
]))
这几乎是你作为基础所需要的。
您必须进一步定制以满足您的需求
要了解如何做到这一点,请查看