尝试对大型查询集进行分页,这样即使数据已添加到数据库中,我也可以返回到之前的相同位置。
目前我作为我的分页班:
from rest_framework.pagination import CursorPagination
class MessageCursorPagination(CursorPagination):
page_size = 25
ordering = '-date'
在我的观点中,我有:
from rest_framework.generics import GenericAPIView
from rest_framework.authentication import TokenAuthentication, BasicAuthentication
class MessageViewSet(GenericAPIView):
permission_classes = (IsAuthenticated, )
authentication_classes = (TokenAuthentication,)
pagination_class = pagination.MessageCursorPagination
serializer_class = serializers.MessageSerializer
def get(self, request, **kwargs):
account_id = kwargs.get('account_id', None)
messages = models.Message.objects.filter(
account=account_id)
paginated_messages = self.paginate_queryset(messages)
results = self.serializer_class(paginated_messages, many=True).data
response = self.get_paginated_response(results)
return response
在测试我是否正确设置时,我得到的结果是我期望的下一个链接和前一个链接的null。 转到下一个链接后,我会看到一个新的下一个链接,下一组结果和一个上一个链接。 当我继续下一个链接时,我得到与之前相同的前一个链接,但是使用下一个,下一个链接和下一组数据。 无论我多少次进入下一个链接,下一个链接都保持不变。
为什么之前的链接没有更新?
- 更新 -
看起来我的问题的原因是我在同一天有很多消息。按日期排序,它会尝试返回当前光标之前的日期。我如何按日期订购,但是像使用ids那样使用光标分页逐步浏览列表?
答案 0 :(得分:0)
正确使用游标分页应该有一个满足以下条件的排序字段: