[Django]DRF SerializerMethodField() 란?

2021. 5. 6. 10:06·SW개발/Django
SerializerMethodFiled() 란?

연결되어 있는 serializer 클래스에서 메서드를 호출하여 값을 가져올 수 있는 읽기 전용 필드이다.

객체의 serializer 된 표현에 모든 종류의 데이터를 추가하는데 사용할 수 있다.

 

언제 사용해야 하나요?

객체를 serializer 할 때 모델에 없는 필드를 추가하고 싶거나, 모델에 있는 값을 변형해서 새로운 필드의 값으로 넣고 싶을 때

SerializerMethodField()를 사용하면 된다.

 

어떻게 사용해야 하나요?

User 객체의 모델에는 full_name 필드만 있다고 가정하자.

# Serializer된 User 객체
"id" : 1,
"full_name" : '{"first_name": "Yoon", "last_name": "Jun Ki"}',

이 상황에서 last_name에 대한 정보를 serializer에 추가하여 아래와 같이 만들고 싶은 경우가 있을 것이다.

# last_name을 추가한 Serializer된 User 객체
"id" : 1,
"full_name" : '{"first_name": "Yoon", "last_name": "Jun Ki"}',
"last_name" : "Jun Ki",

모델에서 Meta 클래스를 지정하여 last_name을 추가해보는 방법도 생각해볼 수 있지만, 모델에는 last_name 필드가 존재하지 않기 때문에

이 방법으로는 위처럼 만들 수 없다.

 

이 때, SerializerMethodField()를 사용하여 last_name 필드를 추가함으로써 해결할 수 있다. 이를 위해서 단 2가지의 작업만 수행하면 된다.

  1. Serializer에 SerializerMethodField()로 모델에 존재하지 않는 필드 추가
  2. Serializer에 Method 추가 (객체의 값을 변형해서 넣기 위함
SerializerMethodField() 작성
Class UserSerializer(serializers.Serializer):
    full_name = JSONField
    first_name = serializers.SerializerMethodField('get_first_name')
	
    def get_first_name(self, obj): # 객체를 인자로 받음
    	return obj.full_name['first_name'] # 유저 객체의 full_name 속성에서 first_name 추출

다음과 같은 코드를 작성함으로써 모델에 존재하지 않는 필드를 Serializer의 필드에 추가할 수 있게 되었다.

 

728x90

'SW개발 > Django' 카테고리의 다른 글

[Django]Docker-compose로 Django 환경 구축하기 1 - Django  (0) 2021.05.27
[Django]추천하는 모듈 import 순서  (0) 2021.05.07
[Django]FBV vs CBV (함수형 뷰 vs 클래스형 뷰)  (0) 2021.05.03
[Django]Django ORM, 실수하기 쉬운 Queryset의 특징  (4) 2021.04.26
[Django]예제를 통해 알아보는 Django ORM이 호출하는 SQL의 구조 (feat. select_related, prefetch_related)  (10) 2021.04.21
'SW개발/Django' 카테고리의 다른 글
  • [Django]Docker-compose로 Django 환경 구축하기 1 - Django
  • [Django]추천하는 모듈 import 순서
  • [Django]FBV vs CBV (함수형 뷰 vs 클래스형 뷰)
  • [Django]Django ORM, 실수하기 쉬운 Queryset의 특징
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    음식
    어플리케이션
    Contributor
    배달
    트리 #AVL #알고리즘 #자료구조
    배달비 공유
    플레이스토어
    배공파용
    컨트리뷰터
    g
    라이프 스타일
    django
    오픈소스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[Django]DRF SerializerMethodField() 란?
상단으로

티스토리툴바