Aashish Gahlawat
Aashish Gahlawat

Reputation: 439

Get nested serialized data as one

Actual Return

{
"store_product_mapping":{
  "master_product":{
    "name": "abc",
    "description": "xyz"
    }
  }
"selling_price": 445
}

Serializers looks like:

class GrandParentSerializer(serializers.ModelSerializer):
  class Meta:
  model = Z
  fields = ('name', 'description')

class ParnetSerializer(serializers.ModelSerializer):
  master_product = GrandParentSerializer(many=False, read_only=False)
  class Meta:
  model = Y
  fields = ('master_product',)

class ChildSerializer(serializers.ModelSerializer):
  store_product_mapping = ParnetSerializer(many=False, read_only=False) 
  class Meta:
  model = X
  fields = ('store_product_mapping', 'selling_price')

Am using nested rest_framework.serializer.ModelSerializer to serialize the data from multiple levels but in response i need it to be like. Do I need to make a new dictionary and in a loop update the dictionary? Or is there a shortcut to do same?

{
"name": xyz
"description": abcd
"price": 10
}

Upvotes: 3

Views: 53

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

You can use source argument like this:

class ChildSerializer(serializers.ModelSerializer):
      name = serializers.CharField(source='store_product_mapping.master_product.name') 
      description = serializers.CharField(source='store_product_mapping.master_product.description') 

      class Meta:
          model = X
          fields = ('name', 'description', 'selling_price')

Upvotes: 5

Related Questions