Почему у меня возникает AttributeError: 'QuerySet' object has no attribute 'answer' on django serializer "PUT" method
Я пытаюсь обновить вложенный сериализатор, но он говорит, что у queryset нет атрибута, вот код ниже, пожалуйста, помогите.
Views.py
class QuizQuestionDetail(APIView):
def get(self, request, format=None, **kwargs):
quizz = Question.objects.filter(id=kwargs['pk'])
serializer = QuestionSerializer(quizz, many=True)
return Response(serializer.data)
def put(self, request, format=None, **kwargs):
quizz = Question.objects.filter(id=kwargs['pk'])
serializer = QuestionSerializer(quizz, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Serializer.py
class AnswerSerializer(serializers.ModelSerializer):
class Meta:
model = Answer
fields = [
'id',
'answer_text',
'is_right',
]
class QuestionSerializer(serializers.ModelSerializer):
answer = AnswerSerializer(many=True)
class Meta:
model = Question
fields = ['id','quiz', 'title','answer', ]
def create(self, validated_data):
answers_data = validated_data.pop('answer')
question = Question.objects.create(**validated_data)
for answer_data in answers_data:
Answer.objects.create(question=question, **answer_data)
return question
def update(self, instance, validated_data):
answers_data = validated_data.pop('answer')
answer = instance.answer.all()
answers = list(answer)
instance.quiz = validated_data.get('quiz', instance.quiz)
instance.title = validated_data.get('title', instance.title)
instance.save()
for answer_data in answers_data:
answer = answers.objects.get(pk=answer_data['id'])
answer.answer_text = answer_data.get('answer_text', answer.answer_text)
answer.is_right = answer_data.get('is_right', answer.is_right)
answer.save()
return instance
serializer = QuestionSerializer(quizz, data=request.data)
вы передаете queryset без установки many=True
метод фильтра возвращает кверисет, даже если в нем один объект, для передачи кверисета в сериализатор необходимо установить множество атрибутов
serializer = QuestionSerializer(quizz, data=request.data, many=True)