Сериализация вложенных моделей в Django Rest Framework - PullRequest
1 голос
/ 03 мая 2019

У меня есть вложенные модели и многие ко многим отношениям. Когда я пытаюсь их сериализовать, результаты не видны.

Перепробовал все в документации и связанных названиях и т. Д.

Моя базовая модель выглядит так:

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. Что я могу сделать?

1 Ответ

2 голосов
/ 03 мая 2019

Вы использовали "неправильную комбинацию queryset-serializer" для класса набора.

Итак, измените ссылку на набор запросов в вашем классе представления на

class QuestionViewSet(viewsets.ModelViewSet):
    <b>queryset = MCQuestion.objects.all()</b>
    serializer_class = MCQuestionSerializer

Кроме того, я не уверен, что вы знаете о Django Model Inheritance. В любом случае, при необходимости прочитайте его отсюда: Модель наследования Django

...