为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2023-12-12 10:21:57
我正在尝试为我的 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 30class 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由于某种原因从未被调用。谁能帮我解决这个问题吗?
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信