为什么我的 CursorPagination class 总是 return 与之前的 link 相同?
Why does my CursorPagination class always return the same previous link?
尝试对大型查询集进行分页,以便我可以 return 到我之前所在的相同位置,即使数据已添加到数据库中也是如此。
目前我的页码是class:
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
在测试我是否设置正确时,我得到了预期的结果,下一个 link 和前一个 link 的空值。
转到下一个 link 后,我得到一个新的下一个 link、下一组结果和一个前一个 link。
当我继续下一个 link 时,我得到与以前相同的前一个 link,但有下一个、下一个 link 和下一组数据。
无论我去多少次,下一个link 上一个link 保持不变。
为什么之前的link没有更新?
-- 更新--
看来我的问题是因为我在同一天收到了很多消息。按日期排序它会尝试返回到当前光标之前的日期。如何按日期排序,但像使用 id 一样使用光标分页逐步浏览列表?
正确使用游标分页应该有一个满足以下条件的排序字段:
- 应该是不变的值,例如时间戳、slug 或其他在创建时仅设置一次的字段。
- 应该是独一无二的,或者几乎是独一无二的。毫秒精度时间戳就是一个很好的例子。此游标分页的实现使用智能 "position plus offset" 样式,使其能够正确支持非严格唯一值作为排序。
- 应该是可以强制转换为字符串的不可空值。
尝试对大型查询集进行分页,以便我可以 return 到我之前所在的相同位置,即使数据已添加到数据库中也是如此。
目前我的页码是class:
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
在测试我是否设置正确时,我得到了预期的结果,下一个 link 和前一个 link 的空值。 转到下一个 link 后,我得到一个新的下一个 link、下一组结果和一个前一个 link。 当我继续下一个 link 时,我得到与以前相同的前一个 link,但有下一个、下一个 link 和下一组数据。 无论我去多少次,下一个link 上一个link 保持不变。
为什么之前的link没有更新?
-- 更新--
看来我的问题是因为我在同一天收到了很多消息。按日期排序它会尝试返回到当前光标之前的日期。如何按日期排序,但像使用 id 一样使用光标分页逐步浏览列表?
正确使用游标分页应该有一个满足以下条件的排序字段:
- 应该是不变的值,例如时间戳、slug 或其他在创建时仅设置一次的字段。
- 应该是独一无二的,或者几乎是独一无二的。毫秒精度时间戳就是一个很好的例子。此游标分页的实现使用智能 "position plus offset" 样式,使其能够正确支持非严格唯一值作为排序。
- 应该是可以强制转换为字符串的不可空值。