Fixed #15127 -- Properly copy the choices of choice fields. Thanks, dready and Julian Phalip.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16416 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
aa40dc6252
commit
22529d41b2
|
@ -657,6 +657,11 @@ class ChoiceField(Field):
|
||||||
initial=initial, help_text=help_text, *args, **kwargs)
|
initial=initial, help_text=help_text, *args, **kwargs)
|
||||||
self.choices = choices
|
self.choices = choices
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
result = super(ChoiceField, self).__deepcopy__(memo)
|
||||||
|
result._choices = copy.deepcopy(self._choices, memo)
|
||||||
|
return result
|
||||||
|
|
||||||
def _get_choices(self):
|
def _get_choices(self):
|
||||||
return self._choices
|
return self._choices
|
||||||
|
|
||||||
|
|
|
@ -771,6 +771,26 @@ class FormsTestCase(TestCase):
|
||||||
f = Person(name_max_length=None)
|
f = Person(name_max_length=None)
|
||||||
self.assertEqual(f['first_name'].field.max_length, f['last_name'].field.max_length, (30, 30))
|
self.assertEqual(f['first_name'].field.max_length, f['last_name'].field.max_length, (30, 30))
|
||||||
|
|
||||||
|
# Similarly, choices do not persist from one Form instance to the next.
|
||||||
|
# Refs #15127.
|
||||||
|
class Person(Form):
|
||||||
|
first_name = CharField(required=False)
|
||||||
|
last_name = CharField(required=False)
|
||||||
|
gender = ChoiceField(choices=(('f', 'Female'), ('m', 'Male')))
|
||||||
|
|
||||||
|
def __init__(self, allow_unspec_gender=False, *args, **kwargs):
|
||||||
|
super(Person, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
if allow_unspec_gender:
|
||||||
|
self.fields['gender'].choices += (('u', 'Unspecified'),)
|
||||||
|
|
||||||
|
f = Person()
|
||||||
|
self.assertEqual(f['gender'].field.choices, [('f', 'Female'), ('m', 'Male')])
|
||||||
|
f = Person(allow_unspec_gender=True)
|
||||||
|
self.assertEqual(f['gender'].field.choices, [('f', 'Female'), ('m', 'Male'), ('u', 'Unspecified')])
|
||||||
|
f = Person()
|
||||||
|
self.assertEqual(f['gender'].field.choices, [('f', 'Female'), ('m', 'Male')])
|
||||||
|
|
||||||
def test_hidden_widget(self):
|
def test_hidden_widget(self):
|
||||||
# HiddenInput widgets are displayed differently in the as_table(), as_ul())
|
# HiddenInput widgets are displayed differently in the as_table(), as_ul())
|
||||||
# and as_p() output of a Form -- their verbose names are not displayed, and a
|
# and as_p() output of a Form -- their verbose names are not displayed, and a
|
||||||
|
@ -1154,7 +1174,7 @@ class FormsTestCase(TestCase):
|
||||||
def test_boundfield_values(self):
|
def test_boundfield_values(self):
|
||||||
# It's possible to get to the value which would be used for rendering
|
# It's possible to get to the value which would be used for rendering
|
||||||
# the widget for a field by using the BoundField's value method.
|
# the widget for a field by using the BoundField's value method.
|
||||||
|
|
||||||
class UserRegistration(Form):
|
class UserRegistration(Form):
|
||||||
username = CharField(max_length=10, initial='djangonaut')
|
username = CharField(max_length=10, initial='djangonaut')
|
||||||
password = CharField(widget=PasswordInput)
|
password = CharField(widget=PasswordInput)
|
||||||
|
|
Loading…
Reference in New Issue