如何更改 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"
}
我需要自定义 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"
}