-
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로 꺼내옵니다.
결과 화면