DRF 사용 시 drf-spectacular OpenApiExample 안 나타날 때

x·2024년 5월 8일
0

drf-spectacular

목록 보기
2/2

기존 view에서 APIView를 상속받아 사용했고 extend_schema 데코레이터에서 OpenApiExample를 사용했다. swagger를 확인하면 예시가 잘 나왔다. RetrieveAPIView를 상속받도록 변경하고 swagger를 확인했는데 예시가 사라져있었다. 반환할 때 JsonResponse가 아닌 Response 때문인가라고 생각했지만 원인은 get 메서드를 사용하지 않고 retrieve를 사용했기 때문이다. 다시 get으로 바꿔줘야한다. ListAPIView를 사용할 때도 마찬가지로 get을 사용하면 된다.

extend_schema

parameters=[
            OpenApiParameter(
                name="id",
                type=int,
                location=OpenApiParameter.PATH,
                required=True,
                examples=[
                    OpenApiExample(
                        name="",
                        description="",
                        value="30000",
                    ),
                ],
            )
        ],

ListAPIView를 상속해서 사용할 때 list 대신 get을 써도 어차피 list가 호출된다. RetrieveAPIView도 get을 호출해도 부모(RetrieveModelMixin)의 retrieve가 호출된다.

class ListAPIView(mixins.ListModelMixin,
                  GenericAPIView):
    """
    Concrete view for listing a queryset.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)
        
class RetrieveAPIView(mixins.RetrieveModelMixin,
                      GenericAPIView):
    """
    Concrete view for retrieving a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

0개의 댓글