KeyError: "Got KeyError when attempting to get a value for field
author
on serializerReviewSerializer
.\nThe serializer field might be named incorrectly and not match any attribute or key on thedict
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__"