From 6a21ada37e353a00dc694441fdc0bcf309f0cc4c Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 2 May 2009 14:56:35 +0000 Subject: Fixed #9609 -- Modified the clean method of(Null)Boolean field to accept '1' and '0' as valid inputs. Thanks to psagers for the patch. This is required to support the use of non-default form widgets such as RadioSelect when the data comes from MySQL, which uses 1/0 to represent booleans. Merge of r10660 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10662 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/regressiontests/forms/fields.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests') diff --git a/tests/regressiontests/forms/fields.py b/tests/regressiontests/forms/fields.py index f66f2e1bb5..9d9d7227b9 100644 --- a/tests/regressiontests/forms/fields.py +++ b/tests/regressiontests/forms/fields.py @@ -1077,6 +1077,10 @@ False True >>> f.clean(0) False +>>> f.clean('1') +True +>>> f.clean('0') +False >>> f.clean('Django rocks') True @@ -1201,7 +1205,10 @@ True >>> f.clean(False) False >>> f.clean(None) +>>> f.clean('0') +False >>> f.clean('1') +True >>> f.clean('2') >>> f.clean('3') >>> f.clean('hello') @@ -1220,6 +1227,21 @@ True >>> f.cleaned_data['hidden_nullbool2'] False +# Make sure we're compatible with MySQL, which uses 0 and 1 for its boolean +# values. (#9609) +>>> NULLBOOL_CHOICES = (('1', 'Yes'), ('0', 'No'), ('', 'Unknown')) +>>> class MySQLNullBooleanForm(Form): +... nullbool0 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) +... nullbool1 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) +... nullbool2 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) +>>> f = MySQLNullBooleanForm({ 'nullbool0': '1', 'nullbool1': '0', 'nullbool2': '' }) +>>> f.full_clean() +>>> f.cleaned_data['nullbool0'] +True +>>> f.cleaned_data['nullbool1'] +False +>>> f.cleaned_data['nullbool2'] + # MultipleChoiceField ######################################################### >>> f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')]) -- cgit v1.3