我在视图集中解析request.data时遇到问题。我有一个模型,可以根据产品添加多个图像。
我想从传入数据中分割image,将产品数据发送到ProductSerializer,然后将image发送到其使用产品数据进行序列化并保存。
我有两个模型,就像这样:
def Product(models.Model):
name = models.CharField(max_length=20)
color = models.ForeignKey(Color, on_delete=models.CASCADE)
def Color(models.Model):
name = models.CharField(max_length=15)
def Image(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.ImageField(upload_to='product_pics/')
我要发送到Product的请求(127.0.0.1:8000/products/)就像这样:
{
"name": "strawberry",
"color": {
"name": "red"
},
"productimage_set": [
{"image": "<some_encode_image_data>"}
]
}
序列化器没有什么特别的,它只是提取标签链接,所以我没有编写它。如何发送multipart / form-data,如何在视图集中进行解析?或解决方案是什么?
如果我没有正确理解,只需创建一个ImageSerializer并将其附加到ProductSerializer。像这样的东西:
ImageSerializer(serializers.ModelSerializer):
#attrs
ProductSerializer(serializers.ModelSerializer):
productimage_set = ImageSerializer(read_only=True, many=True)
您可以在序列化程序更新/创建方法中分割图像。将您的发布数据=> productimage_set更改为image_set。
ProductSerializer(serializers.ModelSerializer):
image_set = ImageSerializer(read_only=True, many=True)
class Meta:
model = Product
fields = ('name', 'color', 'image_set')
def update(self, instance, validated_data):
image = validated_data.pop('image_set', None)
# if you want you can send image another serializer here.
instance.name = validated_data['name']
instance.save()
return instance