在 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
.
我正在尝试列出 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
.