从Django Rest框架渲染外键元素

时间:2018-07-13 10:23:31

标签: django django-rest-framework

我有标准的Django民意调查模型

class Poll(models.Model):

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.question_text

class Choice(models.Model):

    poll = models.ForeignKey(Poll, null=True, blank=True)
    choice_text = models.CharField(max_length=200)
    vote_count = models.IntegerField(default=0)

在序列化程序中,我添加了对外键的引用,如下所示:

class PollSerializer(serializers.ModelSerializer):
    choices = ChoiceSerializer(many=True, read_only=True, required=False)

    class Meta:
        model = Poll
        fields = ('id', 'question_text', 'pub_date', 'choices')

我已经由django管理员创建了特定于问题的选择。在django rest框架的民意调查列表中,我希望看到与民意调查相关的选项列表。它仅显示轮询对象,如下所示。

enter image description here

有人可以指导我有关丢失的内容吗?如何查看与投票相关的选择?

2 个答案:

答案 0 :(得分:2)

由于选择对象的反向管理器为choice_set,因此应为choices字段设置source='choice_set'

class PollSerializer(serializers.ModelSerializer):
    choices = ChoiceSerializer(many=True, read_only=True, required=False, source='choice_set')

答案 1 :(得分:2)

除了@neverwalkaloneranswer之外,您也可以通过这种方式进行操作,

class PollSerializer(serializers.ModelSerializer):
    choices_set = ChoiceSerializer(many=True, read_only=True, required=False)

    class Meta:
        model = Poll
        fields = ('id', 'question_text', 'pub_date', 'choices_set')