Skip to content
Next Next commit
Remove formatted messages as parameters to field bound validators, fixes
 #3354

- Update tests to reflect new error messages provided by Django field
  parent classes
  • Loading branch information
nryoung authored and xordoquy committed Sep 23, 2015
commit 1f20cb775304ebc00ab11e41352ef2b6fe9f857f
27 changes: 9 additions & 18 deletions rest_framework/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -675,11 +675,9 @@ def __init__(self, **kwargs):
self.min_length = kwargs.pop('min_length', None)
super(CharField, self).__init__(**kwargs)
if self.max_length is not None:
message = self.error_messages['max_length'].format(max_length=self.max_length)
self.validators.append(MaxLengthValidator(self.max_length, message=message))
self.validators.append(MaxLengthValidator(self.max_length))
if self.min_length is not None:
message = self.error_messages['min_length'].format(min_length=self.min_length)
self.validators.append(MinLengthValidator(self.min_length, message=message))
self.validators.append(MinLengthValidator(self.min_length))

def run_validation(self, data=empty):
# Test for the empty string here so that it does not get validated,
Expand Down Expand Up @@ -820,11 +818,9 @@ def __init__(self, **kwargs):
self.min_value = kwargs.pop('min_value', None)
super(IntegerField, self).__init__(**kwargs)
if self.max_value is not None:
message = self.error_messages['max_value'].format(max_value=self.max_value)
self.validators.append(MaxValueValidator(self.max_value, message=message))
self.validators.append(MaxValueValidator(self.max_value))
if self.min_value is not None:
message = self.error_messages['min_value'].format(min_value=self.min_value)
self.validators.append(MinValueValidator(self.min_value, message=message))
self.validators.append(MinValueValidator(self.min_value))

def to_internal_value(self, data):
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
Expand Down Expand Up @@ -854,11 +850,9 @@ def __init__(self, **kwargs):
self.min_value = kwargs.pop('min_value', None)
super(FloatField, self).__init__(**kwargs)
if self.max_value is not None:
message = self.error_messages['max_value'].format(max_value=self.max_value)
self.validators.append(MaxValueValidator(self.max_value, message=message))
self.validators.append(MaxValueValidator(self.max_value))
if self.min_value is not None:
message = self.error_messages['min_value'].format(min_value=self.min_value)
self.validators.append(MinValueValidator(self.min_value, message=message))
self.validators.append(MinValueValidator(self.min_value))

def to_internal_value(self, data):
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
Expand Down Expand Up @@ -903,11 +897,9 @@ def __init__(self, max_digits, decimal_places, coerce_to_string=None, max_value=
super(DecimalField, self).__init__(**kwargs)

if self.max_value is not None:
message = self.error_messages['max_value'].format(max_value=self.max_value)
self.validators.append(MaxValueValidator(self.max_value, message=message))
self.validators.append(MaxValueValidator(self.max_value))
if self.min_value is not None:
message = self.error_messages['min_value'].format(min_value=self.min_value)
self.validators.append(MinValueValidator(self.min_value, message=message))
self.validators.append(MinValueValidator(self.min_value))

def to_internal_value(self, data):
"""
Expand Down Expand Up @@ -1606,8 +1598,7 @@ def __init__(self, model_field, **kwargs):
max_length = kwargs.pop('max_length', None)
super(ModelField, self).__init__(**kwargs)
if max_length is not None:
message = self.error_messages['max_length'].format(max_length=max_length)
self.validators.append(MaxLengthValidator(max_length, message=message))
self.validators.append(MaxLengthValidator(max_length))

def to_internal_value(self, data):
rel = getattr(self.model_field, 'rel', None)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_bound_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class ExampleSerializer(serializers.Serializer):
serializer.is_valid()

assert serializer['text'].value == 'x' * 1000
assert serializer['text'].errors == ['Ensure this field has no more than 100 characters.']
assert serializer['text'].errors == ['Ensure this value has at most 100 characters (it has 1000).']
assert serializer['text'].name == 'text'
assert serializer['amount'].value is 123
assert serializer['amount'].errors is None
Expand Down
4 changes: 2 additions & 2 deletions tests/test_generics.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def test_post_error_root_view(self):
data = {'text': 'foobar' * 100}
request = factory.post('/', data, HTTP_ACCEPT='text/html')
response = self.view(request).render()
expected_error = '<span class="help-block">Ensure this field has no more than 100 characters.</span>'
expected_error = '<span class="help-block">Ensure this value has at most 100 characters (it has 600).</span>'
self.assertIn(expected_error, response.rendered_content.decode('utf-8'))


Expand Down Expand Up @@ -301,7 +301,7 @@ def test_put_error_instance_view(self):
data = {'text': 'foobar' * 100}
request = factory.put('/', data, HTTP_ACCEPT='text/html')
response = self.view(request, pk=1).render()
expected_error = '<span class="help-block">Ensure this field has no more than 100 characters.</span>'
expected_error = '<span class="help-block">Ensure this value has at most 100 characters (it has 600).</span>'
self.assertIn(expected_error, response.rendered_content.decode('utf-8'))


Expand Down