私のアプリで特定のModelViewSet
のカスタムpagination_class
を正常に実装しましたが、基本的な別のカスタムpagination_classを実装する際に問題がありますViewSet
。Django RESTフレームワークのビューセットがpagination_classに従っていません
ここで働いpagination_classおよび関連ModelViewSetです:
class Model1Pagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
class Model1ViewSet(viewsets.ModelViewSet):
"""
API endpoint that returns the instances of Model1
"""
queryset = Model1.objects.all()
serializer_class = Model1Serializer
pagination_class = Model1Pagination
@list_route()
def extra(self, request)
....
return <something>
そして、これは動作していないpagination_classとビューセットです:
class Model2Pagination(PageNumberPagination):
page_size = 1
page_query_param = 'page_size'
max_page_size = 1
class Model2GenericViewSet(viewsets.ViewSet):
"""
API endpoint to return the instances of Model2
"""
def get_queryset():
return Model2.objects.all()
pagination_class = Model2Pagination
def list(self, request):
queryset = self.get_queryset()
serializer = Model2Serializer(queryset, many=True, context={'request': request})
return Response(serializer.data)
私はModel2GenericViewSet
として機能するように変更することができたとしModelViewSet
ですが、私はリファクタリングを避けることを望んでいました.DRFドキュメントには次のように書かれています。
を使用している場合は自動的に行われるので、私は大丈夫だろうページネーションはあなたが汎用ビューまたはビューセット
ViewSet
を使用して考え出しました。もともとビューセットに
get_queryset()
を指定していなかったので、最初は私がそうしなければならないと思っていましたが、それを加えても動作には影響しませんでした。
Model1Pagination
といくつかのテストの後、私は改ページが、それは私が改ページが必要なので、私はちょうどこれを見つけた方法ではありませんviewset- Model1
でextra()
方法の結果には適用され見ていませんよ。
上記のドキュメントで引用されていることは、ページングが文字通りビルトインビューセットメソッドにのみ適用されることを意味していますか?
:
戻るような応答をページング!私はGenericViewSetから継承し、私の 'list()'メソッドを更新しましたが、今や奇妙なことが起こっています。レスポンスにはページがあるように見えますが、各ページにはクエリーセット全体があります。私のDBには21の「Students」インスタンスがあり、 'page_size' = 1を試しています。ページには1ページではなく、21個のオブジェクトすべてがリストされます。編集:これは私自身のせいで、 'if'ブロック内のシリアライザに' page'を渡すのを忘れました – dkhaupt