我有嵌套模型和许多对许多关系。当我尝试序列化它们时,结果不可见。
尝试了文档和相关名称等中的所有内容。
我的基本模型是这样的:
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模型中搜索属性。我该怎么办?
答案 0 :(得分:2)
您正在为视图集类使用“错误的查询集-序列化器组合”。
因此,将视图类中的queryset引用更改为,
class QuestionViewSet(viewsets.ModelViewSet):
queryset = MCQuestion.objects.all()
serializer_class = MCQuestionSerializer
除此之外,我不确定您是否了解Django模型继承。无论如何,如有需要,请从这里阅读,Django Model Inheriitance