前置き
初学者なりの知らなかったというお話なので、多くの方には関係のない内容です。
問題
実際に返却されるレスポンスは問題ないけど、swaggerにページネーション形式のレスポンスが表示されない
@extend_schema(responses=SongListSerializer, tags=["song"])
class SongListView(views.APIView):
pagination_class = CustomPaginator
def get(self: Self, request: Request, *args: Any, **kwargs: Any) -> Response:
"""曲一覧情報の取得"""
songs = Song.objects.alive().select_related("album", "artist").all()
paginator = CustomPaginator()
result_page = paginator.paginate_queryset(songs, request)
serializer = SongListSerializer(data=result_page, many=True)
serializer.is_valid()
return paginator.get_paginated_response(serializer.data)
あれ。。
実際にリクエストを送るとページネーション形式のレスポンスが返る
解決
from drf_spectacular.utils import extend_schema, inline_serializer
@extend_schema(
responses={
200: inline_serializer(
name="PaginatedSongResponse",
fields={
"count": serializers.IntegerField(),
"next": serializers.CharField(allow_null=True),
"previous": serializers.CharField(allow_null=True),
"results": SongListSerializer(many=True),
},
),
},
tags=["song"],
)
class SongListView(views.APIView):
pagination_class = CustomPaginator
def get(self: Self, request: Request, *args: Any, **kwargs: Any) -> Response:
"""曲一覧情報の取得"""
songs = Song.objects.alive().select_related("album", "artist").all()
paginator = CustomPaginator()
result_page = paginator.paginate_queryset(songs, request)
serializer = SongListSerializer(data=result_page, many=True)
serializer.is_valid()
return paginator.get_paginated_response(serializer.data)
えぇ。。。。
こんなデコレータ書かないといけないんですか。。。
なにかいい方法はないものでしょうか?