Reputation: 231
I have two ModelSerializers:
class VariantSerializer(serializers.ModelSerializer):
class Meta:
model = Variant
fields = (
'id',
'name',
... and so on)
and
class PictureItemSerializer(serializers.ModelSerializer):
class Meta:
model = PictureItem
fields = (
'id',
... and so forth)
What I want to do is to return a JSON including a single instance of the VariantSerializer, and multiple instances of the PictureItemSerializer.
I created another serializer as such:
class PictureItemUploadSerializer(serializers.Serializer):
variant = VariantSerializer()
pictureItems = PictureItemSerializer(many=True)
But I'm having difficulties in instantiating this "combination" of a serializer if you will.
This does not work:
p = PictureItemUploadSerializer()
p.variant = variant_serializer
p.pictureItems = picture_item_serializer
return Response(p.data, status=status.HTTP_201_CREATED)
as it yields empty data:
{
"variant": {
"name": ""
},
"pictureItems": []
}
Upvotes: 1
Views: 865
Reputation: 47876
You need to pass the data dictionary to the serializer when you are creating an instance of the serializer.
Lets say variant_data
contains data for Variant
model and picture_items_data
contains the list of PictureItem
model data.
Create a data
dictionary containing them.
data = {'variant': variant_data, 'pictureItems': picture_items_data}
Then pass this data to the serializer.
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
Upvotes: 1