[1.1.X] Fixed #12048 - MultiWidget does not define `__deepcopy__`
Thanks to powderflask for report, test case and initial patch. Backport of [12739] from trunk git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12740 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
0a7ec91dc3
commit
693dcd9013
|
@ -744,6 +744,11 @@ class MultiWidget(Widget):
|
|||
media = media + w.media
|
||||
return media
|
||||
media = property(_get_media)
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
obj = super(MultiWidget, self).__deepcopy__(memo)
|
||||
obj.widgets = copy.deepcopy(self.widgets)
|
||||
return obj
|
||||
|
||||
class SplitDateTimeWidget(MultiWidget):
|
||||
"""
|
||||
|
|
|
@ -32,6 +32,8 @@ from widgets import tests as widgets_tests
|
|||
from formsets import tests as formset_tests
|
||||
from media import media_tests
|
||||
|
||||
from widgets import WidgetTests
|
||||
|
||||
__test__ = {
|
||||
'extra_tests': extra_tests,
|
||||
'fields_tests': fields_tests,
|
||||
|
|
|
@ -1234,3 +1234,43 @@ u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" n
|
|||
|
||||
"""
|
||||
|
||||
|
||||
from django.utils import copycompat as copy
|
||||
from unittest import TestCase
|
||||
from django import forms
|
||||
|
||||
|
||||
class SelectAndTextWidget(forms.MultiWidget):
|
||||
"""
|
||||
MultiWidget subclass
|
||||
"""
|
||||
def __init__(self, choices=[]):
|
||||
widgets = [
|
||||
forms.RadioSelect(choices=choices),
|
||||
forms.TextInput
|
||||
]
|
||||
super(SelectAndTextWidget, self).__init__(widgets)
|
||||
|
||||
def _set_choices(self, choices):
|
||||
"""
|
||||
When choices are set for this widget, we want to pass those along to the Select widget
|
||||
"""
|
||||
self.widgets[0].choices = choices
|
||||
def _get_choices(self):
|
||||
"""
|
||||
The choices for this widget are the Select widget's choices
|
||||
"""
|
||||
return self.widgets[0].choices
|
||||
choices = property(_get_choices, _set_choices)
|
||||
|
||||
|
||||
class WidgetTests(TestCase):
|
||||
|
||||
def test_12048(self):
|
||||
# See ticket #12048.
|
||||
w1 = SelectAndTextWidget(choices=[1,2,3])
|
||||
w2 = copy.deepcopy(w1)
|
||||
w2.choices = [4,5,6]
|
||||
# w2 ought to be independent of w1, since MultiWidget ought
|
||||
# to make a copy of its sub-widgets when it is copied.
|
||||
self.assertEqual(w1.choices, [1,2,3])
|
||||
|
|
Loading…
Reference in New Issue