diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d9322ec25..0d4d26572 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -577,14 +577,18 @@ class CharField(Field): self.validators.append(MinLengthValidator(self.min_length, message=message)) def run_validation(self, data=empty): + (is_empty_value, data) = self.validate_empty_values(data) + if is_empty_value: + return data + + value = self.to_internal_value(data) # Test for the empty string here so that it does not get validated, # and so that subclasses do not need to handle it explicitly # inside the `to_internal_value()` method. - if data == '': + if value == '': if not self.allow_blank: self.fail('blank') - return '' - return super(CharField, self).run_validation(data) + return super(CharField, self).run_validation(value) def to_internal_value(self, data): value = six.text_type(data) diff --git a/tests/test_fields.py b/tests/test_fields.py index fd2e14667..1c4228d3a 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -461,6 +461,13 @@ class TestCharField(FieldValues): field = serializers.CharField(trim_whitespace=False) assert field.to_internal_value(' abc ') == ' abc ' + def test_disallow_blank_with_trim_whitespace(self): + field = serializers.CharField(allow_blank=False, trim_whitespace=True) + + with pytest.raises(serializers.ValidationError) as exc_info: + field.run_validation(' ') + assert exc_info.value.detail == ['This field may not be blank.'] + class TestEmailField(FieldValues): """