Оригинальный текст исключения был: Объект 'Category' не имеет атрибута 'answer'.

Пожалуйста, проверьте ошибку.Буду признателен, если вы сможете помочь:

error: Получена ошибка AttributeError при попытке получить значение для поля answer на сериализаторе CategorySerializer. Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра Category. Оригинальный текст исключения был: 'Category' object has no attribute 'answer'.

model.py:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    question_type = models.CharField(max_length=200)

    def __str__(self):
        return f'{self.id}-{self.question_text}'

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE,related_name='questions_answer')
    answer_text = models.CharField(max_length=200)

    def __str__(self):
        return self.answer_text

class Category(models.Model):
    category_text = models.CharField(max_length=200)

    def __str__(self):
        return self.category_text

serializer.py:

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = '__all__'

class AnswerSerializer(serializers.ModelSerializer):
    ques=QuestionSerializer(source='questions',read_only=True)
    class Meta:
        model = Answer
        fields = '__all__'

class CategorySerializer(serializers.ModelSerializer):
    # question=QuestionSerializer(read_only=True,source='question.question')
    answer=AnswerSerializer(many=True)
    class Meta:
        model = Category
        fields = ['id','category_text','answer']
    
    def create(self, validated_data):
        answer_data = validated_data.pop('answer')
        category = Category.objects.create(**validated_data)
        for answer_data in answer_data:
            Answer.objects.create(**answer_data)
        return category

views.py

class QestionAnswer(generics.CreateAPIView):
    serializer_class = CategorySerializer
    def perform_create(self,serializer):
        serializer.save()

Из того, что я вижу в вашем коде, в CategorySerializer вы указываете атрибут fields в классе Meta, как

class Meta:
    model = Category
    fields = ['id','category_text','answer']

Проблема здесь в том, что поля, включенные сюда, должны быть частью модели Category. В models.py класс Category не имеет поля answer. Решением этой проблемы может быть изменение модели Category на:

class Category(models.Model):
    category_text = models.CharField(max_length=200)
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)

    def __str__(self):
        return self.category_text

Вероятно, вам потребуется добавить значение по умолчанию, чтобы правильно выполнить миграции. Надеюсь, это решит проблему!

Вернуться на верх