[Django]DRF SerializerMethodField()

Error Coder·2023년 3월 15일
0

SerializerMethodField()란?

연결되어 있는 serializer 클래스에서 메서드를 호출하여 값을 가져올 수 있는 읽기 전용 필드
객체의 serializer 된 표현에 모든 종류의 데이터를 추가하는데 사용 가능함

언제 사용해야 하나?

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

어떻게 사용해야 하나?

# 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 필드가 존재하지 않아 Meta 클래스 방법으로는 만들 수 없다.

이 경우, 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의 필드에 추가가 가능하게 할 수 있다.

출처 : https://leffept.tistory.com/319

profile
개발자 지망생

0개의 댓글