diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d9322ec25..ff6db703f 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -580,7 +580,7 @@ class CharField(Field): # 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 data == '' or (self.trim_whitespace and six.text_type(data).strip() == ''): if not self.allow_blank: self.fail('blank') return '' 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): """