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가지의 작업만 수행하면 된다.
- Serializer에 SerializerMethodField()로 모델에 존재하지 않는 필드 추가
- 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 |