如何在Django Rest Framework中设置自定义分页



我正在尝试为我的API端点设置自定义分页,如果URL中有过滤器,Django必须返回特定数量的记录,如果没有任何过滤器,则必须返回另一数量的记录。

我有以下代码:

valid_filters = {'Name', 'Date'}
def _has_valid_filters(iterable):
return not valid_filters.isdisjoint(iterable)
class MyPagination(LimitOffsetPagination):
def get_page_size(self, request):
if _has_valid_filters(request.query_params.items()):
return 15
else:
return 30
class MyView(viewsets.ModelViewSet):
pagination_class = MyPagination
http_method_names = ['get']
serializer_class = My_Serializer

def get_queryset(self):
valid_filters = {
'Name': 'Name',
'Date': 'Date__gte',
}
filters = {valid_filters[key]: value for key, value in self.request.query_params.items() if key in valid_filters.keys()}
queryset = Model.objects.filter(**filters)
return queryset

此代码的问题在于分页总是相同的。虽然调用了MyPagination,但由于某种原因,似乎从未调用过get_page_size。有人能帮我吗?

我不认为LimitOffsetPagination有一个名为get_page_size的方法,所以它永远不会被调用。我相信你想要的是get_limit()

也就是说,我认为以这种方式模糊页面限制有点不RESTful,我认为这应该由客户端提供的查询参数来控制。

最新更新