Alvaro Bataller
Alvaro Bataller

Reputation: 483

Django: How to change field name in nested serializer

Currently, I have this serializer:

class TokenSerializer(serializers.ModelSerializer):
    """
    Serializer for Token model
    """
    user = UserDataSerializer(many=False, read_only=True)

    class Meta:
        model = TokenModel
        fields = ('key', 'user')

And this is the response I get:

{
    "key": "d1de7dd82f2b987a6d9f35f1d033876e164f7132",
    "user": {
        "username": "peter258",
        "first_name": "Peter",
        "last_name": "Jones",
        "email": "[email protected]"
    }
}

I would like to change the response so instead of saying "user" it says "data" but when I change the serializer to something like this, I only get the "key" in the response:

class TokenSerializer(serializers.ModelSerializer):
    """
    Serializer for Token model
    """
    data = UserDataSerializer(many=False, read_only=True)

    class Meta:
        model = TokenModel
        fields = ('key', 'data')

How do you properly change the name of the "user" field inside nested serializers?

Upvotes: 0

Views: 1114

Answers (1)

Glenn D.J.
Glenn D.J.

Reputation: 1965

You can achieve this by providing a source argument to your UserDataSerializer, which expects the name of the attribute that will be used to populate the field.

class TokenSerializer(serializers.ModelSerializer):
    """
    Serializer for Token model
    """
    data = UserDataSerializer(many=False, read_only=True, source="user")

    class Meta:
        model = TokenModel
        fields = ('key', 'data')

Upvotes: 3

Related Questions