【问题标题】:Include a nested element in Django Rest framework serializer在 Django Rest 框架序列化程序中包含嵌套元素
【发布时间】:2015-07-20 07:31:15
【问题描述】:

我正在尝试在 Django rest Framework 序列化程序中列出单个项目的所有图像。

在模型中:

class Item(TimeStampedModel, AbsoluteUrlMixin, ObjectReviewsMixin):
   ...

class ItemImage(models.Model):
    item = models.ForeignKey(Item, related_name='pictures')
    picture = models.ImageField(null=True, blank=True, upload_to="items")

在视图集中:

class ItemImageViewSet(viewsets.ModelViewSet):
    queryset = ItemImage.objects.all()
    serializer_class = ItemSerializer()

在序列化器中:

class ItemImageSerializer(serializers.Serializer):
    class Meta:
        model = ItemImage
        fields =(
            'picture'
        )


class ItemSerializer(ObjectReviewsSerializer):
    pictures = ItemImageSerializer()
    ...

当我到达/items/1 时,我对现场图片的回复是空的 Like "pictures":{} 虽然它应该返回图像列表。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您在ImageSerializer 中包含pictures 字段,但您并没有告诉Django REST 框架它可以接受多个值。

    您应该在初始化时将many=True 传递给该字段

    class ItemImageSerializer(serializers.ModelSerializer):
        class Meta:
            model = ItemImage
            fields =(
                'picture',
            )
    
    
    class ItemSerializer(ObjectReviewsSerializer):
        pictures = ItemImageSerializer(many=True)
        ...
    

    它没有触发错误的原因是您在元组中'picture' 之后缺少逗号。强烈建议始终包含尾随逗号,否则将拆分单值元组。所以你的字段真的是('p', 'i', 'c', 't', 'u', 'r', 'e', ),这显然不是你想要的。

    另一个原因是因为您像使用ModelSerializer 一样使用Serializer,所以一开始实际上没有生成任何字段。 Django REST 框架将忽略 Meta.fields 中包含的任何未实际定义的字段,这就是为什么您总是得到一个空白对象。

    我已在修改后的代码中包含逗号,并将您的序列化程序更改为 ModelSerializer

    【讨论】:

    • 它给出了正确的数字但仍然是空的:pictures":[{},{},{}]
    • @Sekai 刚刚对其进行了编辑,以在您的 fields 元组中包含缺少的逗号。
    • 同样的反应。如果可能的话,我希望您与我确认视图集以及我是否做得对。
    • @Sekai 发现了另一个问题,此时如果我们遗漏了任何其他问题,它应该开始触发异常。
    • 太棒了!现在它起作用了!请告诉我,这也适用于写作吗?我的意思是当我从我的应用程序发送图片时。还是应该在我的序列化程序中添加一些东西?
    猜你喜欢
    • 2019-12-23
    • 2021-06-23
    • 2016-05-14
    • 2018-12-13
    • 2015-05-11
    • 2015-02-17
    • 2020-07-07
    • 2015-08-14
    相关资源
    最近更新 更多