Skip to content
This repository was archived by the owner on Jul 18, 2019. It is now read-only.

Commit 2cd4162

Browse files
committed
Remove formatted messages as parameters to field bound validators, fixes encode#3354
- Update tests to reflect new error messages provided by Django field parent classes
1 parent b1a5294 commit 2cd4162

File tree

3 files changed

+12
-21
lines changed

3 files changed

+12
-21
lines changed

rest_framework/fields.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -675,11 +675,9 @@ def __init__(self, **kwargs):
675675
self.min_length = kwargs.pop('min_length', None)
676676
super(CharField, self).__init__(**kwargs)
677677
if self.max_length is not None:
678-
message = self.error_messages['max_length'].format(max_length=self.max_length)
679-
self.validators.append(MaxLengthValidator(self.max_length, message=message))
678+
self.validators.append(MaxLengthValidator(self.max_length))
680679
if self.min_length is not None:
681-
message = self.error_messages['min_length'].format(min_length=self.min_length)
682-
self.validators.append(MinLengthValidator(self.min_length, message=message))
680+
self.validators.append(MinLengthValidator(self.min_length))
683681

684682
def run_validation(self, data=empty):
685683
# Test for the empty string here so that it does not get validated,
@@ -820,11 +818,9 @@ def __init__(self, **kwargs):
820818
self.min_value = kwargs.pop('min_value', None)
821819
super(IntegerField, self).__init__(**kwargs)
822820
if self.max_value is not None:
823-
message = self.error_messages['max_value'].format(max_value=self.max_value)
824-
self.validators.append(MaxValueValidator(self.max_value, message=message))
821+
self.validators.append(MaxValueValidator(self.max_value))
825822
if self.min_value is not None:
826-
message = self.error_messages['min_value'].format(min_value=self.min_value)
827-
self.validators.append(MinValueValidator(self.min_value, message=message))
823+
self.validators.append(MinValueValidator(self.min_value))
828824

829825
def to_internal_value(self, data):
830826
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
@@ -854,11 +850,9 @@ def __init__(self, **kwargs):
854850
self.min_value = kwargs.pop('min_value', None)
855851
super(FloatField, self).__init__(**kwargs)
856852
if self.max_value is not None:
857-
message = self.error_messages['max_value'].format(max_value=self.max_value)
858-
self.validators.append(MaxValueValidator(self.max_value, message=message))
853+
self.validators.append(MaxValueValidator(self.max_value))
859854
if self.min_value is not None:
860-
message = self.error_messages['min_value'].format(min_value=self.min_value)
861-
self.validators.append(MinValueValidator(self.min_value, message=message))
855+
self.validators.append(MinValueValidator(self.min_value))
862856

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

905899
if self.max_value is not None:
906-
message = self.error_messages['max_value'].format(max_value=self.max_value)
907-
self.validators.append(MaxValueValidator(self.max_value, message=message))
900+
self.validators.append(MaxValueValidator(self.max_value))
908901
if self.min_value is not None:
909-
message = self.error_messages['min_value'].format(min_value=self.min_value)
910-
self.validators.append(MinValueValidator(self.min_value, message=message))
902+
self.validators.append(MinValueValidator(self.min_value))
911903

912904
def to_internal_value(self, data):
913905
"""
@@ -1604,8 +1596,7 @@ def __init__(self, model_field, **kwargs):
16041596
max_length = kwargs.pop('max_length', None)
16051597
super(ModelField, self).__init__(**kwargs)
16061598
if max_length is not None:
1607-
message = self.error_messages['max_length'].format(max_length=max_length)
1608-
self.validators.append(MaxLengthValidator(max_length, message=message))
1599+
self.validators.append(MaxLengthValidator(max_length))
16091600

16101601
def to_internal_value(self, data):
16111602
rel = getattr(self.model_field, 'rel', None)

tests/test_bound_fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class ExampleSerializer(serializers.Serializer):
3939
serializer.is_valid()
4040

4141
assert serializer['text'].value == 'x' * 1000
42-
assert serializer['text'].errors == ['Ensure this field has no more than 100 characters.']
42+
assert serializer['text'].errors == ['Ensure this value has at most 100 characters (it has 1000).']
4343
assert serializer['text'].name == 'text'
4444
assert serializer['amount'].value is 123
4545
assert serializer['amount'].errors is None

tests/test_generics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def test_post_error_root_view(self):
154154
data = {'text': 'foobar' * 100}
155155
request = factory.post('/', data, HTTP_ACCEPT='text/html')
156156
response = self.view(request).render()
157-
expected_error = '<span class="help-block">Ensure this field has no more than 100 characters.</span>'
157+
expected_error = '<span class="help-block">Ensure this value has at most 100 characters (it has 600).</span>'
158158
self.assertIn(expected_error, response.rendered_content.decode('utf-8'))
159159

160160

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

307307

0 commit comments

Comments
 (0)