2016-02-16 13 views
5

私はdjango rest framework paginationに問題があります。以下は私のビューセットですDjango restフレームワークはViewSetのpage_sizeをオーバーライドします

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

- 私のような設定で改ページを設定しました。

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 

このビューセットには別のページサイズを設定します。私はpage_sizeとPaginate_byクラス変数を設定しようとしましたが、設定で定義されたPAGE_SIZEに従ってリストにページが設定されています。私が間違っていることを知っている?

+0

を'pagination_class'を設定しようとしましたか? – ilse2005

+0

一般的なビューのget_paginate_byメソッドをオーバーライドするときに、ハード最大限の外観を設定する場合は、 –

+0

pagination_classは機能しましたが、カスタムページネーションクラスを作成する必要がありました。 – Mangesh

答えて

7

カスタムページネーションクラスを作成してこれを修正しました。クラス内で所望のページサイズを設定する。私は私のビューセットでpagination_classとしてこのクラスを使用しています。

class ExamplePagination(pagination.PageNumberPagination):  
     page_size = 2 

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 
    pagination_class=ExamplePagination 

これは簡単な方法があるかどうかわかりません。これは私のために働いた。しかし、私はそれだけでpage_sizeを変更する新しいクラスを作成することは良いと思う。

編集 - 簡単な解決策は、ビューセットで

pagination.PageNumberPagination.page_size = 100 

と同じように設定されています。クエリが動的にページサイズを提供するために、paramsは

class HobbyCategoryViewSet(viewsets.ModelViewSet):  
    serializer_class = HobbyCategorySerializer 
    queryset = UserHobbyCategory.objects.all() 
    pagination.PageNumberPagination.page_size = 100 
+0

異なるビューセットのpagination.PageNumberPagination.page_sizeを変更しても、サイズは異なりません。 page_sizeは1つだけ設定されています –

5

使用のページサイズ..

from rest_framework.pagination import PageNumberPagination 

class StandardResultsSetPagination(PageNumberPagination): 
    page_size_query_param = 'limit' 

設定デフォルトのページネーションクラス設定で

REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'StandardResultsSetPagination',} 

今、あなたのURLでGETパラメータとして上限を提供しています。 。

http://example.com/list/ ?制限= 100または25

+0

'StandardResultsSetPagination'クラスは 'DEFAULT_PAGINATION_CLASS'に表示される場所を指定します。 – Curtwagner1984

+0

編集された答え...設定を追加する必要があります – Naresh

+0

はい、私は、settings.pyのDEFAULT_PAGINATION_CLASS設定にそれが表示されるように、クラス自体をどこに置くのですか? – Curtwagner1984

1

あなたはLimitOffsetPaginationクラスの「ページサイズ」を変更しようとしている場合は、あなたの代わりにPAGE_SIZEdefault_limit変数上書きする必要があります。

from rest_framework import paginationclass 


CustomLimitOffsetPagination(pagination.LimitOffsetPagination): 
    default_limit = 5 
関連する問題