Skip to content

Commit 19ca86d

Browse files
authored
Fix lazy translation of ListField errors (#6708)
* Test init for fields w/ lazy translations * Fix lazy translations for ListField
1 parent 0d0e7c3 commit 19ca86d

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

rest_framework/fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,10 +1610,10 @@ def __init__(self, *args, **kwargs):
16101610
super().__init__(*args, **kwargs)
16111611
self.child.bind(field_name='', parent=self)
16121612
if self.max_length is not None:
1613-
message = self.error_messages['max_length'].format(max_length=self.max_length)
1613+
message = lazy(self.error_messages['max_length'].format, str)(max_length=self.max_length)
16141614
self.validators.append(MaxLengthValidator(self.max_length, message=message))
16151615
if self.min_length is not None:
1616-
message = self.error_messages['min_length'].format(min_length=self.min_length)
1616+
message = lazy(self.error_messages['min_length'].format, str)(min_length=self.min_length)
16171617
self.validators.append(MinLengthValidator(self.min_length, message=message))
16181618

16191619
def get_value(self, dictionary):

tests/importable/__init__.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,16 @@
1-
from rest_framework import compat # noqa
1+
"""
2+
This test "app" exists to ensure that parts of Django REST Framework can be
3+
imported/invoked before Django itself has been fully initialized.
4+
"""
5+
6+
from rest_framework import compat, serializers # noqa
7+
8+
9+
# test initializing fields with lazy translations
10+
class ExampleSerializer(serializers.Serializer):
11+
charfield = serializers.CharField(min_length=1, max_length=2)
12+
integerfield = serializers.IntegerField(min_value=1, max_value=2)
13+
floatfield = serializers.FloatField(min_value=1, max_value=2)
14+
decimalfield = serializers.DecimalField(max_digits=10, decimal_places=1, min_value=1, max_value=2)
15+
durationfield = serializers.DurationField(min_value=1, max_value=2)
16+
listfield = serializers.ListField(min_length=1, max_length=2)

tests/importable/test_installed.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,21 @@
44

55

66
def test_installed():
7-
# ensure that apps can freely import rest_framework.compat
7+
# ensure the test app hasn't been removed from the test suite
88
assert 'tests.importable' in settings.INSTALLED_APPS
99

1010

11-
def test_imported():
12-
# ensure that the __init__ hasn't been mucked with
11+
def test_compat():
1312
assert hasattr(importable, 'compat')
13+
14+
15+
def test_serializer_fields_initialization():
16+
assert hasattr(importable, 'ExampleSerializer')
17+
18+
serializer = importable.ExampleSerializer()
19+
assert 'charfield' in serializer.fields
20+
assert 'integerfield' in serializer.fields
21+
assert 'floatfield' in serializer.fields
22+
assert 'decimalfield' in serializer.fields
23+
assert 'durationfield' in serializer.fields
24+
assert 'listfield' in serializer.fields

0 commit comments

Comments
 (0)