【问题标题】:Django REST Framework nested serializer having no effectDjango REST Framework嵌套序列化器没有效果
【发布时间】:2016-04-25 02:46:53
【问题描述】:

我正在尝试在 Django REST Framework 中设置嵌套序列化程序,但在遵循文档中的简短指南 http://www.django-rest-framework.org/api-guide/relations/#nested-relationships 之后,我在序列化数据中没有变化

models.py

class Franchise(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)


class Item(models.Model):
    id = models.AutoField(primary_key=True)
    franchise = models.ForeignKey(Franchise, on_delete=None)
    title = models.CharField(max_length=255)

初始 serializers.py

class ItemListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('id', 'franchise', 'title')


class FranshiseDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Franchise
        fields = ('id', 'name', 'items')

当我使用查询集查询ItemListSerializer 时,我得到预期

[
    {
        "id": 1,
        "franchise": 1,
        "title": "Item 1",
    },
    {
        "id": 2,
        "franchise": 1,
        "title": "Item 2"
    },
    {
        "id": 3,
        "franchise": 2,
        "title": "Item 3",
    }
]

当我使用预先存在的特许经营对象查询 FranchiseDetailSerializer 时,预期的结果。

{
    "id": 1,
    "name": "Franchise 1"
}

现在,当我根据 DRF 嵌套关系指南更改 FranchiseDetailSerializer 时:

class FranshiseDetailSerializer(serializers.ModelSerializer):
    items = ItemListSerializer(many=True, read_only=True)

    class Meta:
        model = Franchise
        fields = ('id', 'name', 'items')

我希望得到以下结果:

{
    "id": 1,
    "name": "Franchise 1"
    "items": [
       {"id": 1, "title": "Item 1", "franchise": 1},
       {"id": 2, "title": "Item 2", "franchise": 1}
    ]
}

但是,我得到没有变化,好像我根本没有更新FranchiseDetailSerializer

{
    "id": 1,
    "name": "Franchise 1"
}

对我来说最糟糕的是我没有遇到任何错误,我只是没有看到结果

感谢您的任何帮助。

【问题讨论】:

    标签: python django rest serialization


    【解决方案1】:

    实际上你错过了一小部分文档:)

    album = models.ForeignKey(Album, related_name='tracks')

    ForeignKey 中定义related_name

    franchise = models.ForeignKey(Franchise, on_delete=None, related_name='items')
    

    在这些东西开始为我工作之后。

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 2018-06-23
      • 2015-03-20
      • 1970-01-01
      • 2023-01-10
      • 2017-07-28
      • 2015-11-09
      • 2018-06-04
      相关资源
      最近更新 更多