|
13 | 13 | from django.core.exceptions import ValidationError as DjangoValidationError
|
14 | 14 | from django.core.exceptions import ObjectDoesNotExist
|
15 | 15 | from django.core.validators import (
|
16 |
| - EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator, |
17 |
| - MinValueValidator, RegexValidator, URLValidator, ip_address_validators |
| 16 | + EmailValidator, RegexValidator, URLValidator, ip_address_validators |
18 | 17 | )
|
19 | 18 | from django.forms import FilePathField as DjangoFilePathField
|
20 | 19 | from django.forms import ImageField as DjangoImageField
|
|
25 | 24 | from django.utils.duration import duration_string
|
26 | 25 | from django.utils.encoding import is_protected_type, smart_text
|
27 | 26 | from django.utils.formats import localize_input, sanitize_separators
|
| 27 | +from django.utils.functional import lazy |
28 | 28 | from django.utils.ipv6 import clean_ipv6_address
|
29 | 29 | from django.utils.timezone import utc
|
30 | 30 | from django.utils.translation import ugettext_lazy as _
|
31 | 31 |
|
32 | 32 | from rest_framework import ISO_8601
|
33 | 33 | from rest_framework.compat import (
|
34 |
| - InvalidTimeError, get_remote_field, unicode_repr, unicode_to_repr, |
35 |
| - value_from_object |
| 34 | + InvalidTimeError, MaxLengthValidator, MaxValueValidator, |
| 35 | + MinLengthValidator, MinValueValidator, get_remote_field, unicode_repr, |
| 36 | + unicode_to_repr, value_from_object |
36 | 37 | )
|
37 | 38 | from rest_framework.exceptions import ErrorDetail, ValidationError
|
38 | 39 | from rest_framework.settings import api_settings
|
@@ -750,11 +751,17 @@ def __init__(self, **kwargs):
|
750 | 751 | self.min_length = kwargs.pop('min_length', None)
|
751 | 752 | super(CharField, self).__init__(**kwargs)
|
752 | 753 | if self.max_length is not None:
|
753 |
| - message = self.error_messages['max_length'].format(max_length=self.max_length) |
754 |
| - self.validators.append(MaxLengthValidator(self.max_length, message=message)) |
| 754 | + message = lazy( |
| 755 | + self.error_messages['max_length'].format, |
| 756 | + six.text_type)(max_length=self.max_length) |
| 757 | + self.validators.append( |
| 758 | + MaxLengthValidator(self.max_length, message=message)) |
755 | 759 | if self.min_length is not None:
|
756 |
| - message = self.error_messages['min_length'].format(min_length=self.min_length) |
757 |
| - self.validators.append(MinLengthValidator(self.min_length, message=message)) |
| 760 | + message = lazy( |
| 761 | + self.error_messages['min_length'].format, |
| 762 | + six.text_type)(min_length=self.min_length) |
| 763 | + self.validators.append( |
| 764 | + MinLengthValidator(self.min_length, message=message)) |
758 | 765 |
|
759 | 766 | def run_validation(self, data=empty):
|
760 | 767 | # Test for the empty string here so that it does not get validated,
|
@@ -909,11 +916,17 @@ def __init__(self, **kwargs):
|
909 | 916 | self.min_value = kwargs.pop('min_value', None)
|
910 | 917 | super(IntegerField, self).__init__(**kwargs)
|
911 | 918 | if self.max_value is not None:
|
912 |
| - message = self.error_messages['max_value'].format(max_value=self.max_value) |
913 |
| - self.validators.append(MaxValueValidator(self.max_value, message=message)) |
| 919 | + message = lazy( |
| 920 | + self.error_messages['max_value'].format, |
| 921 | + six.text_type)(max_value=self.max_value) |
| 922 | + self.validators.append( |
| 923 | + MaxValueValidator(self.max_value, message=message)) |
914 | 924 | if self.min_value is not None:
|
915 |
| - message = self.error_messages['min_value'].format(min_value=self.min_value) |
916 |
| - self.validators.append(MinValueValidator(self.min_value, message=message)) |
| 925 | + message = lazy( |
| 926 | + self.error_messages['min_value'].format, |
| 927 | + six.text_type)(min_value=self.min_value) |
| 928 | + self.validators.append( |
| 929 | + MinValueValidator(self.min_value, message=message)) |
917 | 930 |
|
918 | 931 | def to_internal_value(self, data):
|
919 | 932 | if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
|
@@ -943,11 +956,17 @@ def __init__(self, **kwargs):
|
943 | 956 | self.min_value = kwargs.pop('min_value', None)
|
944 | 957 | super(FloatField, self).__init__(**kwargs)
|
945 | 958 | if self.max_value is not None:
|
946 |
| - message = self.error_messages['max_value'].format(max_value=self.max_value) |
947 |
| - self.validators.append(MaxValueValidator(self.max_value, message=message)) |
| 959 | + message = lazy( |
| 960 | + self.error_messages['max_value'].format, |
| 961 | + six.text_type)(max_value=self.max_value) |
| 962 | + self.validators.append( |
| 963 | + MaxValueValidator(self.max_value, message=message)) |
948 | 964 | if self.min_value is not None:
|
949 |
| - message = self.error_messages['min_value'].format(min_value=self.min_value) |
950 |
| - self.validators.append(MinValueValidator(self.min_value, message=message)) |
| 965 | + message = lazy( |
| 966 | + self.error_messages['min_value'].format, |
| 967 | + six.text_type)(min_value=self.min_value) |
| 968 | + self.validators.append( |
| 969 | + MinValueValidator(self.min_value, message=message)) |
951 | 970 |
|
952 | 971 | def to_internal_value(self, data):
|
953 | 972 |
|
@@ -996,11 +1015,17 @@ def __init__(self, max_digits, decimal_places, coerce_to_string=None, max_value=
|
996 | 1015 | super(DecimalField, self).__init__(**kwargs)
|
997 | 1016 |
|
998 | 1017 | if self.max_value is not None:
|
999 |
| - message = self.error_messages['max_value'].format(max_value=self.max_value) |
1000 |
| - self.validators.append(MaxValueValidator(self.max_value, message=message)) |
| 1018 | + message = lazy( |
| 1019 | + self.error_messages['max_value'].format, |
| 1020 | + six.text_type)(max_value=self.max_value) |
| 1021 | + self.validators.append( |
| 1022 | + MaxValueValidator(self.max_value, message=message)) |
1001 | 1023 | if self.min_value is not None:
|
1002 |
| - message = self.error_messages['min_value'].format(min_value=self.min_value) |
1003 |
| - self.validators.append(MinValueValidator(self.min_value, message=message)) |
| 1024 | + message = lazy( |
| 1025 | + self.error_messages['min_value'].format, |
| 1026 | + six.text_type)(min_value=self.min_value) |
| 1027 | + self.validators.append( |
| 1028 | + MinValueValidator(self.min_value, message=message)) |
1004 | 1029 |
|
1005 | 1030 | def to_internal_value(self, data):
|
1006 | 1031 | """
|
@@ -1797,8 +1822,11 @@ def __init__(self, model_field, **kwargs):
|
1797 | 1822 | max_length = kwargs.pop('max_length', None)
|
1798 | 1823 | super(ModelField, self).__init__(**kwargs)
|
1799 | 1824 | if max_length is not None:
|
1800 |
| - message = self.error_messages['max_length'].format(max_length=max_length) |
1801 |
| - self.validators.append(MaxLengthValidator(max_length, message=message)) |
| 1825 | + message = lazy( |
| 1826 | + self.error_messages['max_length'].format, |
| 1827 | + six.text_type)(max_length=self.max_length) |
| 1828 | + self.validators.append( |
| 1829 | + MaxLengthValidator(self.max_length, message=message)) |
1802 | 1830 |
|
1803 | 1831 | def to_internal_value(self, data):
|
1804 | 1832 | rel = get_remote_field(self.model_field, default=None)
|
|
0 commit comments