Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实例化由多个ModelSerializer组成的序列化程序-Django Rest框架_Python_Django Rest Framework - Fatal编程技术网

Python 实例化由多个ModelSerializer组成的序列化程序-Django Rest框架

Python 实例化由多个ModelSerializer组成的序列化程序-Django Rest框架,python,django-rest-framework,Python,Django Rest Framework,我有两个ModelSerializer: class VariantSerializer(serializers.ModelSerializer): class Meta: model = Variant fields = ( 'id', 'name', ... and so on) 及 我要做的是返回一个JSON,其中包括VariantSerializer的一个实例和Pi

我有两个ModelSerializer:

class VariantSerializer(serializers.ModelSerializer):
    class Meta:
         model = Variant
         fields = (
             'id',
             'name',
             ... and so on)

我要做的是返回一个JSON,其中包括VariantSerializer的一个实例和PictureItemSerializer的多个实例

我创建了另一个序列化程序:

class PictureItemUploadSerializer(serializers.Serializer):
    variant = VariantSerializer()
    pictureItems = PictureItemSerializer(many=True)
但是如果您愿意,我很难实例化序列化程序的这个“组合”

这不起作用:

p = PictureItemUploadSerializer()
p.variant = variant_serializer
p.pictureItems = picture_item_serializer
return Response(p.data, status=status.HTTP_201_CREATED)
当它产生空数据时:

{
    "variant": {
        "name": ""
    },
    "pictureItems": []
}

创建序列化程序实例时,需要将数据字典传递给序列化程序

p = PictureItemUploadSerializer(data=data) # pass the data dictionary
p.is_valid(raise_exception=True) # check if serializer is valid
return Response(p.data, status=status.HTTP_201_CREATED) # return response
假设
variant\u data
包含
variant
模型的数据,
picture\u项目\u data
包含
PictureItem
模型数据的列表

创建包含它们的
数据
字典

data = {'variant': variant_data, 'pictureItems': picture_items_data}
然后将此数据传递给序列化程序

p = PictureItemUploadSerializer(data=data) # pass the data dictionary
p.is_valid(raise_exception=True) # check if serializer is valid
return Response(p.data, status=status.HTTP_201_CREATED) # return response