2017-07-30 55 views
2

我想實現ViewSet上的自定義分頁類,按the docs,但分頁設置只是沒有做一件事。這是我的ViewSet的代碼。如何讓自定義分頁類工作的Django休息框架v3.6

from rest_framework import status, permissions, viewsets 
from rest_framework.pagination import PageNumberPagination 

class ProductViewSetPagination(PageNumberPagination): 
    page_size = 5 
    page_size_query_param = 'page_size' 
    max_page_size = 1000 

class ProductViewSet(viewsets.ModelViewSet): 

    permission_classes = (permissions.IsAuthenticated,) 
    serializer_class = ProductSerializer 
    pagination_class = ProductViewSetPagination 
    # ... 

    def list(self, request): 
     #get_queryset is also overridden to accept filters in query_params 
     queryset = self.get_queryset() 
     if not queryset.exists(): 
      return Response(status=status.HTTP_204_NO_CONTENT) 

     serializer = self.get_serializer(queryset, many=True) 
     return Response(serializer.data) 

我甚至增加了一些默認的settings.py文件,但我仍然讓所有的產品實例單頁上的product-list視圖。我已經嘗試將pagepage_size查詢參數添加到URL中;這不會改變任何東西。

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 
'PAGE_SIZE': 10, 

我錯過了什麼?

+0

你使用默認的列表方式或覆蓋呢? –

+0

它被覆蓋。我已經添加了代碼。 – Escher

+0

我認爲,如果你重寫列表方法,你必須實現自己的分頁呢? – Escher

回答

2

在超級列表中添加分頁,所以嘗試:

def list(self, request): 
     #get_queryset is also overridden to accept filters in query_params 
     queryset = self.get_queryset() 
     if not queryset.exists(): 
      return Response(status=status.HTTP_204_NO_CONTENT) 

     return super(ProductViewSet, self).list(request)