Convert to internal value before validation

Fixes #2710
This commit is contained in:
Johannes 2015-03-18 19:22:38 +00:00
parent e34e0536b1
commit 74657ed9ee
2 changed files with 14 additions and 3 deletions

View File

@ -576,14 +576,18 @@ class CharField(Field):
self.validators.append(MinLengthValidator(self.min_length, message=message)) self.validators.append(MinLengthValidator(self.min_length, message=message))
def run_validation(self, data=empty): 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, # Test for the empty string here so that it does not get validated,
# and so that subclasses do not need to handle it explicitly # and so that subclasses do not need to handle it explicitly
# inside the `to_internal_value()` method. # inside the `to_internal_value()` method.
if data == '': if value == '':
if not self.allow_blank: if not self.allow_blank:
self.fail('blank') self.fail('blank')
return '' return super(CharField, self).run_validation(value)
return super(CharField, self).run_validation(data)
def to_internal_value(self, data): def to_internal_value(self, data):
value = six.text_type(data) value = six.text_type(data)

View File

@ -462,6 +462,13 @@ class TestCharField(FieldValues):
field = serializers.CharField(trim_whitespace=False) field = serializers.CharField(trim_whitespace=False)
assert field.to_internal_value(' abc ') == ' abc ' 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): class TestEmailField(FieldValues):
""" """