serializer
를 사용하다 보면 해당 객체의 필드만 사용하는 것이 아닌 다양한 값을 사용하게 되는 경우가 발생한다. 예를 들면 연관관계가 있는 Group - Mobility에서 mobility.group.name
을 반환하고 싶은 경우이다. 이때 SerializerMethodField
를 사용하면 된다.
get_<field_name>
으로 지정해야 한다. group_id = serializers.SerializerMethodField()
의 경우 get_group_id
from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
days_since_joined = serializers.SerializerMethodField()
class Meta:
model = User
fields = '__all__'
def get_days_since_joined(self, obj):
return (now() - obj.date_joined).days
class ScheduleOutputSerializer(serializers.Serializer):
id = serializers.IntegerField(required=True)
name = serializers.CharField(required=True)
group_id = serializers.SerializerMethodField()
group_name = serializers.SerializerMethodField()
arrival_time = serializers.IntegerField(required=True)
departure_time = serializers.IntegerField(required=True)
unit = serializers.IntegerField(required=True)
start_soc = serializers.FloatField(required=True)
def get_group_id(self, obj):
return obj.mobility.group.id
def get_group_name(self, obj):
return obj.mobility.group.name