django-rest-frameworkdjango-serializer

DRF how to choose serializer for a field based on value of another field


So the problem is I would like to choose the serializer to be used to serialize a particular field based on the value of another field, so for example (pseudocode):

class SerializerA(serializers.Serializer):
   ...
class SerializerB(serializers.Serializer):
   ...
class OverruleSerializer(serialzers.Serializer):
    resolve_type = serializers.CharField()
    sut_name = serializers.CharField()
    overrule_data = SerializerA if resolve_type == "some_type" else SerializerB

Is this possible? I have tried using SerializerMethodField, or overriding to_representation, but no luck


Solution

  • That's what you want to achieve..!

         def get_overrule_data(self, obj):
            resolve_type = obj.get('resolve_type')
            data = obj.get('overrule_data')
            
            if resolve_type == "some_type":
                serializer = SerializerA(data=data)
            else:
                serializer = SerializerB(data=data)