[Django] SerializerMethodField

Junseo Jung·2024년 4월 2일
0

Django

목록 보기
2/4
post-thumbnail

SerializerMethodField

serializer를 사용하다 보면 해당 객체의 필드만 사용하는 것이 아닌 다양한 값을 사용하게 되는 경우가 발생한다. 예를 들면 연관관계가 있는 Group - Mobility에서 mobility.group.name을 반환하고 싶은 경우이다. 이때 SerializerMethodField를 사용하면 된다.

사용 방법

  • read-only 필드이다.
  • 메소드 명을 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

참고.

Serializer fields - Django REST framework

0개의 댓글

관련 채용 정보