gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:36:22 25 4
gpt4 key购买 nike

我试图在 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")

在 View 集中:

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":{} 虽然它应该返回图像列表。

最佳答案

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

关于python - 在 Django Rest 框架序列化程序中包含嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com