From be86d67b16fb73ef06b8c4a5890894b03047bd9b Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Mon, 1 Jul 2019 19:04:15 -0700 Subject: [PATCH] Fix ModelField.max_length handling --- rest_framework/fields.py | 4 ++-- tests/test_fields.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 77767b2c5..f5f0b632e 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1888,9 +1888,9 @@ class ModelField(Field): self.model_field = model_field # The `max_length` option is supported by Django's base `Field` class, # so we'd better support it here. - max_length = kwargs.pop('max_length', None) + self.max_length = kwargs.pop('max_length', None) super().__init__(**kwargs) - if max_length is not None: + if self.max_length is not None: message = lazy_format(self.error_messages['max_length'], max_length=self.max_length) self.validators.append( MaxLengthValidator(self.max_length, message=message)) diff --git a/tests/test_fields.py b/tests/test_fields.py index db6484a7d..7c495cd63 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -2247,6 +2247,21 @@ class TestSerializerMethodField: assert field.method_name == 'get_example_field' +# Tests for ModelField. +# --------------------- + +class TestModelField: + def test_max_length_init(self): + field = serializers.ModelField(None) + assert len(field.validators) == 0 + + field = serializers.ModelField(None, max_length=10) + assert len(field.validators) == 1 + + +# Tests for validation errors +# --------------------------- + class TestValidationErrorCode: @pytest.mark.parametrize('use_list', (False, True)) def test_validationerror_code_with_msg(self, use_list):