Serializer에서 method 사용하기

Serializer에서 method 사용하기

Serializer클래스 내에서 method field를 사용해서, 데이터를 가공하거나 계산된 값을 직접 필드로 추가할 수 있습니다.
이는 데이터 모델에는 없지만, 응답에 포함되어야 하는 데이터를 생산할 때 유용합니다.

method fieldserializer클래스 내에 선언되며, 해당 클래스의 인스턴스에 의해 호출될 때 값을 반환합니다.

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