Jean Bouvattier
Jean Bouvattier

Reputation: 365

How to change serializer field name with python forbidden character

I need to have a serializer that returns data with illegal character inside dictionary key, what I would like is :

class MyModel(models.Model):
    my_field = model.TextField()

...

serializer = MySerializer(django_object)
serializer.data
# returns {'my-field' : "value"}

I have tried using serializers.SerializerMethodField but target field name must be Python valid.

class MySerializer(serializers.Serializer):
    my-field = serializers.SerializerMethodField(method_name="get_my_field")
    # ^ this fail to be interpreted by Python

    def get_my_field(self, obj):
        return obj.my_field

using source as an argument to any Serializer fails for the same reason.

Upvotes: 1

Views: 646

Answers (1)

Feuermann
Feuermann

Reputation: 344

You can simple override to_representation method. e.g.

class MySerializer(serializers.Serializer):
    my_field = serializers.CharField(source="MY-FIELD")  # only if need source

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data["MY-FIELD"] = data.pop("my_field", "")
        return data

Upvotes: 2

Related Questions