我正在嘗試為我的 API 端點設(shè)置自定義分頁,如果 URL 中有過濾器,Django 必須返回特定數(shù)量的記錄,如果沒有任何過濾器,則必須返回另一數(shù)量的記錄。我有以下代碼: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被調(diào)用,但看起來get_page_size由于某種原因從未被調(diào)用。誰能幫我解決這個問題嗎?
1 回答

白豬掌柜的
TA貢獻1893條經(jīng)驗 獲得超10個贊
我不認為LimitOffsetPagination
有一個已命名的方法get_page_size
,因此它永遠不會被調(diào)用。我相信你想要的就是get_limit()
。
也就是說,我認為以這種方式模糊頁面限制有點不穩(wěn)定,我相信這應(yīng)該由客戶端提供的查詢參數(shù)來控制。
添加回答
舉報
0/150
提交
取消