Serializer에서 method 사용하기
Serializer
클래스 내에서 method field
를 사용해서, 데이터를 가공하거나 계산된 값을 직접 필드로 추가할 수 있습니다.
이는 데이터 모델에는 없지만, 응답에 포함되어야 하는 데이터를 생산할 때 유용합니다.
method field
는 serializer
클래스 내에 선언되며, 해당 클래스의 인스턴스에 의해 호출될 때 값을 반환합니다.
예
from rest_framework import serializers
class ProductSerializer(serializers.Serializer):
name = serializers.CharField(max_length=100)
price = serializers.DecimalField(max_digits=10, decimal_places=2)
discount_price = serializers.SerializerMethodField()
def get_discount_price(self, obj):
# obj는 시리얼라이저가 직렬화하고 있는 모델 객체입니다.
discount = 0.1
discount_price = obj.price * (1 - discount)
return discount_price
위의 예시에서 get_discount_price
메서드는 price
필드를 기반으로 할인된 가격을 계산하여 반환합니다.
이 메서드를 method field
로 사용하기 위해 Serializer 클래스 내에 discount_price
필드를 선언합니다.
이렇게 하면 discount_price
필드는 get_discount_price
메서드의 반환값을 포함해, 실제 데이터베이스 모델에 없는 값을 계산해 API 응답에 추가합니다.
그리고 메서드는 꼭 사용할 필드명 앞에 get_
이 붙는 형태입니다. 예를 들어 rating
필드를 사용한다면, 메서드는 get_rating
이 되어야 합니다.
'Python > Django' 카테고리의 다른 글
DRF) serializer에서 validation 메소드 만들기 (0) | 2023.10.01 |
---|---|
Django 소유자 여부 확인(DRF) (0) | 2023.08.28 |
Django에서의 Transactions (0) | 2023.08.26 |
values_list() (0) | 2023.08.09 |
annotate() 메서드와 가변 키워드 인자 (0) | 2023.07.25 |