Skip to content

Commit 2cd4162

Browse files
committed
Remove formatted messages as parameters to field bound validators, fixes #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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy