【问题标题】:How do I merge data of two objects in Django REST Framework如何在 Django REST Framework 中合并两个对象的数据
【发布时间】:2021-07-15 18:59:25
【问题描述】:

假设我有这 2 个模型

投票:

class Poll(models.Model):

    title = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_available = models.BooleanField(default=True)
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):

        return self.title

选项:

class Option(models.Model):

    title = models.CharField(max_length=255)
    poll = models.ForeignKey(Poll, on_delete=models.CASCADE)

    def __str__(self):

        return f'{self.poll.title} - {self.title}'

这两个对象与ForeignKey 相连。现在假设我有一个呈现选项和问题(投票标题)的前端,但我只想对后端进行一次 API 调用。基本上我需要 API 看起来像这样:

{
    "title": "Which is the best frontend framework?",
    "options":[
                {
                    "id": 1,
                    "title": "React"
                },
                {
                    "id": 2,
                    "title": "Vue"
                },
                {
                    "id": 3,
                    "title": "Angular"
                }
            ]
}

我应该如何使用什么方法/技术来合并这样的两个对象?

【问题讨论】:

  • 您必须在 drf 文档中使用嵌套序列化程序说明 here

标签: django django-rest-framework


【解决方案1】:

基于 DRF docs

class OptionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Option
        fields = ['id', 'title']
class PollSerializer(serializers.ModelSerializer):
    options = OptionSerializer(source='option_set', many=True)
    class Meta:
        model = Poll
        fields = ['title', 'options']

【讨论】:

  • 您能解释一下option_set 返回的内容吗?为什么option_set.all() 不返回选项查询集?
  • option_set 是默认的 related_name 你可以更改此选项 az 删除 source 属性或使用 option_set 更改序列化程序中的选项并再次删除源...
猜你喜欢
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多