Search code examples
pythondjangodjango-modelsdjango-rest-frameworkdjango-serializer

How to set a default field in a serializer to be the same as another field in the same serializer?


I have a serializer like this

class SomeSerializer(serializers.Serializer):
   id = serializers.UUIDField(required=False, default=uuid.uuid4)
   anotherId = serializers.UUIDField(required=False, default = ????)

and i want to set field 'anotherId' same as 'id' by default.

This is what I expect

s = SomeSerializer(data={}).
data = s.data
data.id # return '56e34c58-be7d-4c7c-992a-43080faf5614'
data.anotherId #  return '56e34c58-be7d-4c7c-992a-43080faf5614' (as id)

I tried to do it like here but it didn't work

class SomeSerializer(serializers.Serializer):
       id = serializers.UUIDField(required=False, default=uuid.uuid4)
       anotherId = serializers.UUIDField(required=False, default = id.get_default())

How can this be done?


Solution

  • You can use to_representation method for that:

    class SomeSerializer(serializers.Model):
      id = serializers.UUIDField(required=False, default=uuid.uuid4)
      another_id = serializers.UUIDField(required=False)
    
      def to_representation(self, instance):
        data = super().to_representation(instance)
        if not data.get('another_id', None):
          data['another_id'] = data['id']
        return data