ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DRF ListModelMixin의 list method 오버라이드 하기
    카테고리 없음 2021. 2. 19. 12:18

    DRF ListModelMixin의 list 메소드는 response의 형태를 결정합니다.

     

    내장된 list 메소드의 소스코드를 살펴보겠습니다.

    class ListModelMixin:
        """
        List a queryset.
        """
        def list(self, request, *args, **kwargs):
            queryset = self.filter_queryset(self.get_queryset())
    
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)
    
            serializer = self.get_serializer(queryset, many=True)
            return Response(serializer.data)
    

     

    중간에 코드들은 생락하고, 여하튼 결론은 serializer.data를 return하는 형태입니다.

    이를 통해 일반적인 key, value형태의 dictionary가 list안에 담겨 리턴되는데요.

    오버라이드 하지 않았을 때 결과값을 보겠습니다.

     

    만약 이 response 구조를 변경해야 한다면 이 때 사용하는 것이 list메서드 오버라이드 입니다.

    위 데이터를 가공해보겠습니다.

     

    우선 위 데이터는 특정 유저의 포인트 내역 정보인데요.

    위 데이터의 상위에 user eamil과 총 보유 포인트를 함께 Return해야 하는 상황이라 가정하겠습니다.

    아래 코드를 참고해주세요.

        def list(self, request, *args, **kwargs):
            response = super().list(request, *args, **kwargs)
            user = request.user
            current_point = user.point
            res = {"user": user.email,
                   "current_point": current_point,
                   "data": response.data}
            return Response(res)

    설명

    1. super()로 기존 list 메서드의 결과값을 받아 response에 담았습니다.

    2. 그 아래부터는 필요한대로 가공을 해서 결과값을 res에 담습니다.

    이 때 1에서 받은 데이터는 response.data로 꺼내옵니다.

     

    결과 화면

     

    댓글

Designed by Tistory.