2016-07-25 90 views
2

我想分頁ViewSet的結果,但無法獲得分頁數據的響應。DRF pagination_class沒有返回分頁結果

當我設置全局分頁時,它工作正常,但是我不想這樣做並覆蓋來自GenericAPIView的所有視圖/視圖集,因爲我只想在一個類上分頁。

""" 
don't want to do this, but this works showing that my view is based off of `GenericAPIView`. 

# settings.py 
""" 
REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination' 
} 

當我刪除默認的設置,這種觀點失去了分頁結果

# views.py 
from rest_framework.viewsets import ModelViewSet 

class ClipViewSet(ModelViewSet): 
    serializer_class = ClipSerializer 
    queryset = Clip.objects.all() 
    pagination_class = PageNumberPagination 

docs種種跡象表明,這應該是完全有可能的,我不知道爲什麼在我的項目是不工作。我正在使用django 1.9.7和DRF 3.4.0

+0

你使用了正確的'page_size'嗎?嘗試在視圖中將其設置爲較小的值並嘗試。 –

+0

是的,目前有11個結果,我已經將'page_size'設置爲5,並且它不分頁(除了當我在設置中設置默認值時) – awwester

+0

看起來對我來說是一個錯誤。您可以在DRF的github回購中打開一個問題。 –

回答

1

這不是一個錯誤。正如您在source code中看到的那樣,PageNumberPagination的默認頁面大小爲None,這意味着即使您明確指定了分頁程序類,也會禁用分頁。

你需要繼承PageNumberPagination你需要page_size能夠激活分頁:

class MyPageNumberPagination(PageNumberPagination): 
    page_size = 5 

class ClipViewSet(ModelViewSet): 
    pagination_class = MyPageNumberPagination 

請注意,您需要設置page_size的分頁程序類,而不是在視圖。

或被置於全局設置頁面大小:

REST_FRAMEWORK = { 
    'PAGE_SIZE': 5 
} 

然後你就可以直接使用PageNumberPagination

+0

我相信這是一個錯誤,或者如果他們不希望您能夠在不同的視圖中選擇不同的頁面大小,那至少出現文檔問題。但是,我得出了同樣的結論,它更多地在github問題的範圍內而不是stackoverflow。對於其他人來說 - https://github.com/tomchristie/django-rest-framework/issues/4304 – awwester

+0

那麼你可以爲不同的視圖使用不同的頁面大小,你只需要使用不同的'PageNumberPagination'子類您需要的頁面大小(如[文檔](http://www.django-rest-framework.org/api-guide/pagination/#configuration)中所述)。但我同意這不是一個非常直觀和方便的設計恕我直言。 –

+0

這最終導致湯姆在今天早上更新的文檔中出現了一個問題(從未聲明在視圖中使用'pagination_class'需要'PAGE_SIZE'設置),這導致我陷入了這種混亂的路線。 – awwester