CS 면접 준비

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

베스트오버 2023. 8. 2.

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 필드의 값을 포함하여 반환할 수 있습니다. 이 방법을 통해 관련 있는 다른 테이블의 필드 레코드를 반환하는 것이 가능해집니다.

댓글