我正在尝试设置使用 DRF 进行光标分页获取交易记录列表(按创建日期排序)。
我不知道如何执行初始请求,因为我在那个阶段还不知道光标。令人惊讶的是,我找不到这方面的例子。
另外,有没有办法使用 CursorPagination 设置每个请求的页面大小,PageNumberPagination 有页面大小查询参数 and 最大页面大小并且它们不存在于 CursorPagination 中。
这是我到目前为止所拥有的:
class RecordPagination(pagination.CursorPagination):
page_size = 10
class RecordsOverview(generics.ListAPIView):
serializer_class = RecordSerializer
logging_methods = ['GET']
queryset = Record.objects.all()
pagination_class = RecordPagination
# Note: this is my way to dynamically set the page size,
# it is totally hacky, so I'm open to suggestions
# is_number method is left out for brevity
def get(self, request, *args, **kwargs):
page_size = request.GET.get('page_size', '')
if self.is_number(page_size) and int(page_size) > 0:
self.paginator.page_size = int(page_size)
return self.list(request, *args, **kwargs)
然后在我的测试中我做了一个 GET 请求:
response = self.client.get(GET_RECORDS_URL, data={'page_size': 2})
我返回一个“下一个”网址,如下所示:
http://testserver/api/v1/records/?cursor=cj0xJnA9MjAxNy0wOS0yMCsxNCUzQTM0JTNBNDkuNjUxMDU4JTJCMDAlM0EwMA%3D%3D&page_size=2
If I do 获取(下一个网址)我会得到接下来的记录 OK,这次我不必通过数据={'page_size': 2}.
请告诉我是否可以以更干净、更一致的方式完成所有这些工作。