在视图集中解析请求数据,并将其发送到Django REST Framework中的不同序列化器

问题描述 投票:0回答:2

我在视图集中解析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,如何在视图集中进行解析?或解决方案是什么?

python django django-rest-framework serializer django-rest-viewsets
2个回答
0
投票

如果我没有正确理解,只需创建一个ImageSerializer并将其附加到ProductSerializer。像这样的东西:

ImageSerializer(serializers.ModelSerializer):
   #attrs 

ProductSerializer(serializers.ModelSerializer):
    productimage_set = ImageSerializer(read_only=True, many=True)

0
投票

您可以在序列化程序更新/创建方法中分割图像。将您的发布数据=> 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
© www.soinside.com 2019 - 2024. All rights reserved.