У меня есть вложенные модели и многие ко многим отношениям. Когда я пытаюсь их сериализовать, результаты не видны.
Перепробовал все в документации и связанных названиях и т. Д.
Моя базовая модель выглядит так:
class Question(models.Model):
ques_code = models.CharField(max_length=12, null=True, default='Ques Code')
def __str__(self):
return self.ques_code
Детская модель:
class MCQuestion(Question):
answer_order = models.CharField(
max_length=30, null=True, blank=True,
choices=ANSWER_ORDER_OPTIONS,
help_text=_("The order in which multichoice "
"answer options are displayed "
"to the user"),
verbose_name=_("Answer Order"))
Тогда связанный класс ответа с ключом как:
class Answer(models.Model):
mcquestion = models.ForeignKey(MCQuestion,related_name='answers', on_delete=models.CASCADE)
content = models.CharField(max_length=1000,
blank=False,
help_text=_("Enter the answer text that "
"you want displayed"),
verbose_name=_("Content"))
correct = models.BooleanField(blank=False,
default=False,
help_text=_("Is this a correct answer?"),
verbose_name=_("Correct"))
def __str__(self):
return self.content
Сериализаторы:
class AnswerSerializer(serializers.ModelSerializer):
class Meta:
model = Answer
fields = ('content','correct')
class MCQuestionSerializer(serializers.ModelSerializer):
answers = AnswerSerializer(many=True, read_only=True)
#answers = serializers.SerializerMethodField()
quiz = QuizSerializer(many=True)
class Meta:
model = MCQuestion
fields = ('ques_code','answers')
Просмотров:
class QuestionViewSet(viewsets.ModelViewSet):
queryset = Question.objects.all()
serializer_class = MCQuestionSerializer
Когда я получаю доступ к API для вопросов, вложенные ответы не отображаются. Я проверил всю документацию и проверил и изменил мой код.
Если я попытаюсь использовать answers = serializers.SerializerMethodField () и определю для него функцию get_answers, появится сообщение об ошибке «Вопрос не имеет атрибута ответов»
Я думаю, что это связано с системой моделей ребенка и матери. Это атрибут поиска в вопросе, а не в модели MCQuestion. Что я могу сделать?