我正在尝试为我的 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()
。
也就是说,我认为以这种方式模糊页面限制有点不稳定,我相信这应该由客户端提供的查询参数来控制。
添加回答
举报
0/150
提交
取消