如何在 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由于某种原因从未被调用。谁能帮我解决这个问题吗?


莫回无
浏览 48回答 1
1回答

白猪掌柜的

我不认为LimitOffsetPagination有一个已命名的方法get_page_size,因此它永远不会被调用。我相信你想要的就是get_limit()。也就是说,我认为以这种方式模糊页面限制有点不稳定,我相信这应该由客户端提供的查询参数来控制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python