在Django Rest framework serializ中包含嵌套元素

2024-09-29 23:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图列出Django rest Framework serializer中单个项的所有映像。

在模型中:

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")

在视图集中:

^{pr2}$

在序列化程序中:

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


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

当我到达/items/1时,我对字段图片的响应为空 像"pictures":{},而它应该返回图像列表。在


Tags: django模型resttruemodelsitemsframeworkitem
1条回答
网友
1楼 · 发布于 2024-09-29 23:28:07

您正在将pictures字段包含在ImageSerializer上,但没有告诉Django REST framework它可以接受多个值。在

初始化时应将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', ),这显然不是您想要的。在

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

我在修改过的代码中包含了逗号,并将序列化程序改为ModelSerializer。在

相关问题 更多 >

    热门问题