Django Rest Framework中嵌套模型的序列化

时间:2019-05-03 14:00:00

标签: django serialization django-models django-rest-framework

我有嵌套模型和许多对许多关系。当我尝试序列化它们时,结果不可见。

尝试了文档和相关名称等中的所有内容。

我的基本模型是这样的:

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的问题时,嵌套答案是不可见的。我检查了所有文档并检查并更改了代码。

如果我尝试使用答案= serializers.SerializerMethodField()并为其定义get_answers函数,则会出现错误,提示“问题没有答案的属性”

我认为这是由于孩子和母亲的模型系统。它是在Question中而不是在MCQuestion模型中搜索属性。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您正在为视图集类使用“错误的查询集-序列化器组合”。

因此,将视图类中的queryset引用更改为,

class QuestionViewSet(viewsets.ModelViewSet):
    queryset = MCQuestion.objects.all()
    serializer_class = MCQuestionSerializer

除此之外,我不确定您是否了解Django模型继承。无论如何,如有需要,请从这里阅读,Django Model Inheriitance

相关问题