mirror of https://github.com/django/django.git
Fixed #12048 - MultiWidget does not define `__deepcopy__`
Thanks to powderflask for report, test case and initial patch git-svn-id: http://code.djangoproject.com/svn/django/trunk@12739 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
ea288f14e0
commit
e316b8b981
|
@ -739,6 +739,11 @@ class MultiWidget(Widget):
|
||||||
return media
|
return media
|
||||||
media = property(_get_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):
|
class SplitDateTimeWidget(MultiWidget):
|
||||||
"""
|
"""
|
||||||
A Widget that splits datetime input into two <input type="text"> boxes.
|
A Widget that splits datetime input into two <input type="text"> boxes.
|
||||||
|
|
|
@ -39,6 +39,7 @@ from media import media_tests
|
||||||
|
|
||||||
from fields import FieldsTests
|
from fields import FieldsTests
|
||||||
from validators import TestFieldWithValidators
|
from validators import TestFieldWithValidators
|
||||||
|
from widgets import WidgetTests
|
||||||
|
|
||||||
__test__ = {
|
__test__ = {
|
||||||
'extra_tests': extra_tests,
|
'extra_tests': extra_tests,
|
||||||
|
|
|
@ -1269,3 +1269,43 @@ u'<input type="hidden" name="date_0" value="17.09.2007" /><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