source 속성 활용: 관계 데이터 조회 및 모델의 property

Serializer의 source 속성을 활용하여 필드 이름 변경, 관계 데이터 조회, 모델 property 접근을 통해 더 유연한 API 응답 구조 생성

source 속성 기본 개념

  • Serializer 필드가 참조할 모델의 실제 필드나 속성을 지정하는 역할

  • 기본적으로 Serializer 필드명과 모델 필드명을 매칭하지만, source로 다른 필드 참조 가능

  • API 스펙과 DB 컬럼명이 다를 때, 관계 모델 데이터 조회 시, 모델 property 사용 시 활용

필드 이름 변경

class PostSerializer(serializers.ModelSerializer):
    writer = serializers.CharField(source='author_name')
    
    class Meta:
        model = Post
        fields = ['id', 'title', 'content', 'writer']

관계 데이터 조회

정방향 관계 (ForeignKey)

class PostSerializer(serializers.ModelSerializer):
    username = serializers.CharField(source='author.username', read_only=True)
    author_email = serializers.EmailField(source='author.email', read_only=True)
    
    class Meta:
        model = Post
        fields = ['id', 'title', 'username', 'author_email']

N+1 문제 해결 필수: select_related('author') 사용으로 쿼리 최적화

ManyToMany 관계

최적화: prefetch_related('tags') 사용

모델 Property 및 Method 활용

@property 사용

인자 없는 메소드 호출

source vs SerializerMethodField 선택 기준

사용 상황
권장 방법

단순 필드명 변경

source

관계 모델 필드 접근

source

인자 없는 property/method

source

복잡한 로직, request 정보 필요

SerializerMethodField

핵심 주의사항

  • 관계 데이터 접근 시 N+1 쿼리 문제 방지를 위해 select_related 또는 prefetch_related 필수 사용

  • source로 가져온 데이터는 대부분 read_only=True 설정

  • 인자가 있는 메소드는 source로 호출 불가, SerializerMethodField 사용 필요

Last updated