【问题标题】:Serialization of nested models in Django Rest FrameworkDjango Rest Framework 中嵌套模型的序列化
【发布时间】:2019-05-03 13:59:59
【问题描述】:

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

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

我的基本模型是这样的:

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 函数,则会出现错误提示“问题没有答案属性”

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

【问题讨论】:

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


    【解决方案1】:

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

    因此,将视图类中的查询集引用更改为,

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

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

    【讨论】:

    • 这给了我这个错误:django.db.utils.OperationalError: (1054, "Unknown column 'multichoice_answer.mcquestion_id' in 'field list'")
    • 你迁移数据库了吗?
    • 是的,如果我遗漏任何东西,让我再检查一下代码。我没有在字段中的任何地方包含 id
    • 这个错误好像你忘了做数据库迁移
    • 明白了……完成了。谢谢。现在工作。我更改了模型..迁移不适用于现有数据..
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 2019-01-16
    • 2018-06-04
    • 2018-02-17
    • 1970-01-01
    • 2018-06-23
    • 2016-07-28
    • 2014-08-20
    相关资源
    最近更新 更多