DRF вызывает to_internal_value
для преобразования закодированных данных запроса в типы данных python перед обработкой явной проверки этих объектов python. Ошибка, которую вы видите, вызвана в DecimalField.to_internal_value
.
На мой взгляд, самый простой способ справиться с этим - сообщить DRF, как вы ожидаете получить данные запроса, разрешить serializers.DecimalField
перевести запрос в python, а затем обработать преобразование в методе validate_progress
сериализатору. Примерно так (наверное, по имени вашего сериализатора и базовому классу):
class RunnerSerializer(serializers.ModelSerializer):
progress = serializers.DecimalField(
max_digits=5,
decimal_places=2
)
...
def validate_progress(self, value):
if not value:
return value
return value/100
ПРИМЕЧАНИЕ: вы также можете сделать десятичное поле более разрешающим на уровне сериализатора, чем округлить в методе validate.