从Django Rest框架呈现外键元素

从Django Rest框架呈现外键元素,django,django-rest-framework,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

我有标准的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)
在Serialiser中,我添加了对外键的引用,如下所示:

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框架的轮询列表中,我希望看到与轮询相关的选项列表。它仅显示以下轮询对象


有人能告诉我遗漏了什么,以及我如何查看与投票相关的选项吗?

既然choice对象的反向管理器是
choice\u set
您应该为
choices
字段设置:

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

由于选项对象的反向管理器是
choice\u set
,因此您应该为
choices
字段设置:

class PollSerializer(serializers.ModelSerializer):
    choices = ChoiceSerializer(many=True, read_only=True, required=False, source='choice_set')
除了的,你也可以这样做,

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')
类序列化程序(serializers.ModelSerializer):
选项集=选项序列化器(多个=真、只读=真、必需=假)
类元:
模型=投票
字段=('id'、'question\u text'、'pub\u date'、'choices\u set')
除了's之外,您也可以这样做,

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')
类序列化程序(serializers.ModelSerializer):
选项集=选项序列化器(多个=真、只读=真、必需=假)
类元:
模型=投票

字段=('id'、'question\u text'、'pub\u date'、'choices\u set')
您可以在模型的外键字段中添加
相关名称
,然后在DRF中只需添加
源代码=使用的相关名称
,使用
choice\u set
作为模型外键字段的默认反向名称。您可以在模型外键字段中添加
related\u name
,然后在DRF中添加
source=related\u name\u used
否则,使用
choice\u set
作为模型外键字段的默认反向名称。谢谢,对于快速的回答,确实很有帮助。我想,如果我想更改选择,我可以使read_only=False,对吗?默认情况下,
read_only=False
,和
read_only
用于更改值。但是,在您的情况下,从
/polls/
api来看,这是不符合逻辑的。谢谢您的快速回答,确实非常有用。我想,如果我想更改选择,我可以使read_only=False,对吗?默认情况下,
read_only=False
,和
read_only
用于更改值。但是,在您的情况下,从
/polls/
api来看,这是不符合逻辑的。谢谢您提供了快速的答案。如果我想投票,你会怎么做?你会将read_设置为false,还是创建一个新的模型,比如说
投票
,然后将
问题
选择
构建在它们内部,然后通过另一个URL打开帖子请求?@ElonMusk我认为第二个选项更好。您可能需要投票模型来跟踪投票历史记录。感谢您提供了快速答案。如果我想投票,你会怎么做?你会将read_设置为false,还是创建一个新的模型,比如说
投票
,然后将
问题
选择
构建在它们内部,然后通过另一个URL打开帖子请求?@ElonMusk我认为第二个选项更好。以后可能需要使用投票模型来跟踪投票历史记录。