Оригинальный текст исключения был: Объект '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
Вероятно, вам потребуется добавить значение по умолчанию, чтобы правильно выполнить миграции. Надеюсь, это решит проблему!