KeyError: "Got KeyError when attempting to get a value for field `author` on serializer `ReviewSerializer`.

·2023년 10월 10일
0

에러

목록 보기
14/24

KeyError: "Got KeyError when attempting to get a value for field author on serializer ReviewSerializer.\nThe serializer field might be named incorrectly and not match any attribute or key on the dict instance.\nOriginal exception text was: 'author'."

시리얼라이저와 모델에 모두 author 이 있음에도 이런 에러가 떴다.
참고
https://velog.io/@nikevapormax/django-Got-KeyError-when-attempting-to-get-a-value-for-field-on-serializer
https://stackoverflow.com/questions/49276207/got-keyerror-when-attempting-to-get-a-value-for-field-username-on-serializer

해결

serializer 에 받은 값을 그대로 return 하는 함수를 만들어서 해결했다.

from rest_framework import serializers
from .models import Book, Review
from taggit.serializers import TagListSerializerField, TaggitSerializer


class ReviewSerializer(serializers.ModelSerializer):
# 추가한 부분
    author = serializers.SerializerMethodField()
    book = serializers.SerializerMethodField()

    def get_author(self, obj):
        # print(obj["author_id"])
        return obj["author_id"]

    def get_book(self, obj):
        return obj["book_id"]

    class Meta:
        model = Review
        fields = "__all__"


class BookTagSerializer(TaggitSerializer, serializers.ModelSerializer):
    # 태그 포함 시리얼라이저
    tags = TagListSerializerField()

    class Meta:
        model = Book
        fields = "__all__"


class ReviewCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Review
        fields = (
            "title",
            "content",
            "star",
        )


class BookSerializer(serializers.ModelSerializer):
    author = serializers.SerializerMethodField()
    category = serializers.SerializerMethodField()
    cover = serializers.SerializerMethodField()

# 추가한 부분
    def get_author(self, obj):
        # print(obj["author_id"])
        return obj["author_id"]

    def get_category(self, obj):
        return obj["category_id"]

    def get_cover(self, obj):
        return obj["cover"]

    class Meta:
        model = Book
        fields = "__all__"
profile
공부 중

0개의 댓글

관련 채용 정보