django Baseserializer remove certain fields from validated_data

40 views Asked by At

I need to validate a payload json based on, say, fields A, B. But I don't want these to show in serializer.validated_data

I tried to override validated_data base class method.

class MySerializer(serializers.Serializer):
    fieldA = ...
    fieldB = ...
    fieldC = ...
    def validate_fieldA(self, fieldA):
        # validate
    def validate_fieldB(self, fieldB):
        # validate
    def validated_data(self):
        data = super().validated_data()

        exclude_fields = self.context.get('exclude_fields', [])
        for field in exclude_fields:
            # providing a default prevents a KeyError
            # if the field does not exist
            data.pop(field, default=None)

        return data

Now when I try to access serializer.validated_data dict, it returns a method instead of deserialized dictionary.

<bound method MySerializer.validated_data of ....

How do I accomplish this correctly?

1

There are 1 answers

0
911 On

I think you should override "validate" method instead of "validated_data" method.

def validate(self, data):
    exclude_fields = self.context.get('exclude_fields', [])
    for field in exclude_fields:
        # providing a default prevents a KeyError
        # if the field does not exist
        data.pop(field, default=None)

    return data

DRF official documentation