Fixed #25085 -- Overrode Select widget's __deepcopy__()
This commit is contained in:
parent
035b0fa60d
commit
8ee6a3f1a8
|
@ -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 = ''
|
||||
|
|
|
@ -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…
Reference in New Issue