Поле сериализатора DRF переименовано в его источник в проверенных данных - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть сериализатор drf с полем, которое я хотел бы переименовать:

class UserBulkUploadSerializer(serializers.Serializer):
    ...
    is_admin = serializers.BooleanField(required=False, source='administrator')

Однако в атрибуте validated_data он переименован обратно в значение атрибута source.Я делаю это:

serializer = UserBulkUploadSerializer(data=data)
serializer.is_valid()
return serializer.validated_data

И там нет ключа is_admin, это administrator.

Есть ли способ преодолеть это и сделать его is_admin вvalidated_data

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Я думаю, вы захотите добавить два поля, одно поле только для записи и одно поле только для чтения.Например:

class UserBulkUploadSerializer(serializers.Serializer):
    ...
    administrator = serializers.BooleanField(required=False)
    is_admin = serializers.BooleanField(read_only=True, source='administrator')

    extra_kwargs = {
        'administrator': {'write_only': True},
    }

Я еще не смог протестировать это, поэтому я не уверен, что два поля с одним и тем же источником вызовут ошибки, в противном случае вы можете изменить is_admin на SerializerMethodField.

0 голосов
/ 23 сентября 2019

Я покопался в источниках DRF и, похоже, для этого нет чистого решения. Атрибут
validated_data просто не предназначен для этого. Атрибут
data будет выводиться с переименованными ключами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...