uyarc
uyarc

Reputation: 616

Django Rest Framework add new field in serializer data using existing boolean field

I have two serializer classes to serialize user data.

class CurrentUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'email', 'id','first_name','last_name',"is_staff","is_superuser")

class userProfileSerializer(serializers.ModelSerializer):
    user=CurrentUserSerializer(read_only=True)
    class Meta:
        model=userProfile
        fields='__all__'

I can get json data give in below;

{
        "id": 1,
        "user": {
            "username": "x",
            "email": "x",
            "id": 5,
            "first_name": "x",
            "last_name": "x",
            "is_staff": false,
            "is_superuser": true
        },
        "date_joined": "2020-04-16T16:50:38.218964+03:00",
        "updated_on": "2020-04-16T16:50:38.218996+03:00"
    }

I want to control is_superuser. İf it is true ı want add new field which is "role":'ADMIN' and ı want to get json like;

{
            "id": 1,
            "user": {
                "username": "x",
                "email": "x",
                "id": 5,
                "first_name": "x",
                "last_name": "x",
                "role": "ADMIN",
                "is_superuser": true,
                "is_staff": false,
            },
            "date_joined": "2020-04-16T16:50:38.218964+03:00",
            "updated_on": "2020-04-16T16:50:38.218996+03:00"
        }

Upvotes: 3

Views: 689

Answers (1)

Kurohige
Kurohige

Reputation: 1418

you can use SerializerMethodField:

class CurrentUserSerializer(serializers.ModelSerializer):
    role = serializers.SerializerMethodField('is_super')

    def is_super(self, user):
        return "ADMIN" if user.is_superuser else "WHATEVER"

    class Meta:
        model = User
        fields = ('role', 'username', 'email', 'id','first_name','last_name',"is_staff","is_superuser")

Upvotes: 3

Related Questions