Loading django/forms/widgets.py +7 −0 Original line number Diff line number Diff line Loading @@ -521,6 +521,13 @@ class Select(Widget): # more than once. self.choices = list(choices) def __deepcopy__(self, memo): obj = copy.copy(self) obj.attrs = self.attrs.copy() obj.choices = copy.copy(self.choices) memo[id(self)] = obj return obj def render(self, name, value, attrs=None, choices=()): if value is None: value = '' Loading tests/forms_tests/tests/test_widgets.py +15 −0 Original line number Diff line number Diff line Loading @@ -1997,3 +1997,18 @@ class SelectDateWidgetTests(SimpleTestCase): # label tag is correctly associated with first rendered dropdown a = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'}) self.assertIn('<label for="id_mydate_day">', a.as_p()) class SelectWidgetTests(SimpleTestCase): def test_deepcopy(self): """ __deepcopy__() should copy all attributes properly (#25085). """ widget = Select() obj = copy.deepcopy(widget) self.assertTrue(widget is not obj) self.assertEqual(widget.choices, obj.choices) self.assertTrue(widget.choices is not obj.choices) self.assertEqual(widget.attrs, obj.attrs) self.assertTrue(widget.attrs is not obj.attrs) Loading
django/forms/widgets.py +7 −0 Original line number Diff line number Diff line Loading @@ -521,6 +521,13 @@ class Select(Widget): # more than once. self.choices = list(choices) def __deepcopy__(self, memo): obj = copy.copy(self) obj.attrs = self.attrs.copy() obj.choices = copy.copy(self.choices) memo[id(self)] = obj return obj def render(self, name, value, attrs=None, choices=()): if value is None: value = '' Loading
tests/forms_tests/tests/test_widgets.py +15 −0 Original line number Diff line number Diff line Loading @@ -1997,3 +1997,18 @@ class SelectDateWidgetTests(SimpleTestCase): # label tag is correctly associated with first rendered dropdown a = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'}) self.assertIn('<label for="id_mydate_day">', a.as_p()) class SelectWidgetTests(SimpleTestCase): def test_deepcopy(self): """ __deepcopy__() should copy all attributes properly (#25085). """ widget = Select() obj = copy.deepcopy(widget) self.assertTrue(widget is not obj) self.assertEqual(widget.choices, obj.choices) self.assertTrue(widget.choices is not obj.choices) self.assertEqual(widget.attrs, obj.attrs) self.assertTrue(widget.attrs is not obj.attrs)