如何更改 LimitOffsetPagination

How to change LimitOffsetPagination

我需要自定义 LimitOffsetPagination 以便它每次都只显示唯一的对象。 因此,例如,默认情况下它是这样工作的:

客户总数:24
偏移=0 限制=5 => 1,2,3,4,5
偏移=1 限制=5 => 2,3,4,5,6

但我需要它以这种方式工作(也许我应该改变它切片的方式,但我不知道如何):

客户总数:24
偏移=0 限制=5 => 1,2,3,4,5
偏移=1 限制=5 => 6,7,8,9,10

你要求的只是标准PageNumberPagination,与唯一性无关

LimitOffset 描述了 offset# 条记录,从开始 limit 行到return。这直接映射到 SQL 为:

SELECT * FROM table LIMIT 10 OFFSET 100

因此,这两个是等价的:

  • my/url/?page=1&page_size=5
  • my/url/?offset=5&limit=5

使用标准 PageNumberPagination,如果 确实 需要,请更改页数/大小参数名称。我建议不要那样做,因为 limit/offset 在 SQL 中有一个非常直接的模拟,是一个标准,它会造成混淆。

如果您想使用具有用户可设置页面大小的 PageNumberPagination 方法,您需要进行自定义分页 class 并定义 page_size 参数:

class MyPageNumberPagination(PageNumberPagination):
    page_size_query_param = "page_size"
    page_size = 5  # default size
    max_page_size = 100

# A version which pretends to be limit/offset pagination
class PageNumberAsLimitOffset(PageNumberPagination):
    page_query_param = "offset"   # this is the "page"
    page_size_query_param="limit" # this is the "page_size"
    page_size = 5
    max_page_size = 100
    
# Override the DRF default pagination
REST_FRAMEWORK = {
    ...
    "DEFAULT_PAGINATION_CLASS": "project.drf.pagination.MyPageNumberPagination"
}