summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-10-08 09:38:28 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-10-08 10:07:05 +0200
commita28d1b38e55cf588cfaae97de6a575d5c9f90a96 (patch)
tree3948c97d073f934759676edc4a65d4e1e0603f2d
parent06909fe084f87a65459a83bd69d7cdbe4fce9a7c (diff)
Fixed #30839 -- Fixed Field.__deepcopy__() so forms don't share error messages.
-rw-r--r--django/forms/fields.py1
-rw-r--r--tests/forms_tests/tests/test_forms.py11
2 files changed, 12 insertions, 0 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 03cd8af8d7..36ec634929 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -199,6 +199,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&#x27;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