Fixed #25085 -- Overrode Select widget's __deepcopy__()

This commit is contained in:
Eric Carrillo 2015-07-08 19:03:11 -05:00 committed by Tim Graham
parent 035b0fa60d
commit 8ee6a3f1a8
2 changed files with 22 additions and 0 deletions

View File

@ -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 = ''

View File

@ -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)