Django REST Framework每个视图的page_size没有按预期工作



我正在使用Django 2.2Django REST框架

DRF设置为

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'tools.rest_framework.pagination.StandardResultsPagination',
'PAGE_SIZE': 10,
}

其中,分页类被自定义为删除下一页和上一页的URL,并使用页码。

class StandardResultsPagination(PageNumberPagination):
def get_next_link(self):
if not self.page.has_next():
return None
return self.page.next_page_number()
def get_previous_link(self):
if not self.page.has_previous():
return None
return self.page.previous_page_number()

我有两个视图,我想自定义每页的记录数量

class DataCreateListView(generics.ListCreateAPIView):
serializer_class = DataSerializer
pagination.PageNumberPagination.page_size = 20

class DataMinimalListView(generics.ListAPIView):
serializer_class = DataMinimalSerializer
pagination.PageNumberPagination.page_size = 5

定义的URL是

urlpatterns = [
path('data/minimal/', views.DataMinimalListView.as_view()),
path('data/', views.DataCreateListView.as_view())
]

但是当我访问路径时

https://example.com/data/

它只提供了5条记录,而不是20条。

但是当我从CCD_ 2中移除CCD_。

这是因为PageNumberPagination.page_size服务器启动期间获得5作为最后一个值。也就是说,分页类将使用当前模块page_size上次接收值

IMO,在视图类上设置.page_size属性不是一个优雅的解决方案。设置分页类的page_size_query_param属性。

class StandardResultsPagination(PageNumberPagination):
page_size_query_param = 'size'  # items per page
def get_next_link(self):
if not self.page.has_next():
return None
return self.page.next_page_number()
def get_previous_link(self):
if not self.page.has_previous():
return None
return self.page.previous_page_number()

然后,您可以使用size查询参数作为来控制每页的项目

https://example.com/data/?size=10

最新更新