Django Rest Framework добавляет новое поле в данные сериализатора, используя существующее логическое поле - PullRequest
2 голосов
/ 04 мая 2020

У меня есть два класса сериализатора для сериализации пользовательских данных.

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__'

Я могу получить json данные, указанные ниже;

{
        "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"
    }

Я хочу управлять is_superuser. Если это правда, я хочу добавить новое поле, которое называется «роль»: «ADMIN», и я хочу получить 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"
        }

1 Ответ

2 голосов
/ 04 мая 2020

вы можете использовать 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...