2017-07-30 11 views
2

the docsのように、ビューセットにカスタムページネーションクラスを実装しようとしていますが、ページ設定は単なる1つのことではありません。私のViewSetのコードは次のとおりです。django rest framework 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ビューに単一ページにすべての製品のインスタンスを取得しています。 URLにpagepage_sizeというクエリパラメータを追加しようとしました。これは何も変わらない。

'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) 
関連する問題