Search code examples
djangodjango-rest-frameworkdjango-serializer

Django Rest Framework -Serializer inside serializer using same instance


So, I have a weird legacy issue where I have one model "Data", and for serialization purposes I need to restructure the fields.


class Data(models.Model):
   id ...
   field_a
   field_b
   field_c
   date

Then I have the serializers:

class DataInfoSerializer(ModelSerializer):
    class Meta:
        model = Data
        fields = ['field_a', 'field_b', 'field_c']


class DataSerializer(ModelSerializer):
    data_info = DataInfoSerializer(required=False, read_only=True)
    
    class Meta:
        model = Data
        fields = ['id', 'date', 'data_info']

Now I somehow have to get DRF to use the same instance of Data that is passed into the "DataSerializer" to render the DataInfoSerializer.

Any ideas how to achieve this? Or a better way.


Solution

  • Use source='*' to pass the entire object to a field, including nested serializers. Docs

    class DataSerializer(ModelSerializer):
        data_info = DataInfoSerializer(required=False, read_only=True, source='*')
        
        class Meta:
            model = Data
            fields = ['id', 'date', 'data_info']