在 Django Rest 框架序列化程序中包含嵌套元素

Include a nested element in Django Rest framework serializer

我正在尝试列出 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 时,我对现场图片的响应为空 喜欢 "pictures":{} 虽然它应该 return 图片列表。

您在 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.