diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-10-08 09:38:28 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-08 10:28:30 +0200 |
| commit | 7c70aa8f6376d761bd6d4bc075d232ee6e91f8f2 (patch) | |
| tree | af19cea40e5b35c89721f310d1510efae826eac3 | |
| parent | 282138a7bbfc19681327042b9d462e038d88dda6 (diff) | |
[3.0.x] Fixed #30839 -- Fixed Field.__deepcopy__() so forms don't share error messages.
Backport of a28d1b38e55cf588cfaae97de6a575d5c9f90a96 from master
| -rw-r--r-- | django/forms/fields.py | 1 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_forms.py | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py index a977256525..2e11c8ee0a 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -201,6 +201,7 @@ class Field: result = copy.copy(self) memo[id(self)] = result result.widget = copy.deepcopy(self.widget, memo) + result.error_messages = self.error_messages.copy() result.validators = self.validators[:] return result diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 45f5405fee..269567dac8 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -3685,6 +3685,17 @@ Good luck picking a username that doesn't already exist.</p> self.assertIsInstance(p.data, MultiValueDict) self.assertIsInstance(p.files, MultiValueDict) + def test_field_deep_copy_error_messages(self): + class CustomCharField(CharField): + def __init__(self, **kwargs): + kwargs['error_messages'] = {'invalid': 'Form custom error message.'} + super().__init__(**kwargs) + + field = CustomCharField() + field_copy = copy.deepcopy(field) + self.assertIsInstance(field_copy, CustomCharField) + self.assertIsNot(field_copy.error_messages, field.error_messages) + class CustomRenderer(DjangoTemplates): pass |
