CS 면접 준비

TIL230801 Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오

베스트오버 2023. 8. 2. 03:30

ModelSerializer에서 특정 모델에 존재하지 않는 필드를 반환하려면, 해당 필드를 Serializer에서 직접 정의해야 합니다. 이를 위해 SerializerMethodField라는 특별한 필드 타입을 사용할 수 있습니다.

예를 들어, Book 모델이 Author 모델을 외래키로 가지고 있고, BookSerializer에서 Authorname 필드를 반환하려는 경우 다음과 같이 구현할 수 있습니다.

pythonCopy code
from rest_framework import serializers
from .models import Book, Author

class BookSerializer(serializers.ModelSerializer):
    author_name = serializers.SerializerMethodField()

    class Meta:
        model = Book
        fields = ['title', 'published_date', 'author_name']

    def get_author_name(self, obj):
        return obj.author.name

여기에서 SerializerMethodFieldauthor_name이라는 이름으로 정의하였고, 이 필드의 값을 반환하기 위한 메소드로 get_author_name을 정의하였습니다. 이 메소드는 해당 필드의 값을 결정하는 로직을 담당하며, 이 메소드의 이름은 반드시 get_을 접두어로 하여 필드 이름을 따라야 합니다.

이렇게 하면, BookSerializer를 통해 Book 모델의 인스턴스를 serialize할 때 author_name이라는 이름의 필드로 Authorname 필드의 값을 포함하여 반환할 수 있습니다. 이 방법을 통해 관련 있는 다른 테이블의 필드 레코드를 반환하는 것이 가능해집니다.