diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-02 14:56:35 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-02 14:56:35 +0000 |
| commit | 6a21ada37e353a00dc694441fdc0bcf309f0cc4c (patch) | |
| tree | ff98630e153ef3f4baf46e14250df107e7d9daa9 /django/forms/fields.py | |
| parent | 5a089a5b0088149dbcebbbf9194d4acde476cb4e (diff) | |
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
Diffstat (limited to 'django/forms/fields.py')
| -rw-r--r-- | django/forms/fields.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py index 1052d95a56..b2a2d2883d 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -585,9 +585,10 @@ class BooleanField(Field): def clean(self, value): """Returns a Python boolean object.""" # Explicitly check for the string 'False', which is what a hidden field - # will submit for False. Because bool("True") == True, we don't need to - # handle that explicitly. - if value == 'False': + # will submit for False. Also check for '0', since this is what + # RadioSelect will provide. Because bool("True") == bool('1') == True, + # we don't need to handle that explicitly. + if value in ('False', '0'): value = False else: value = bool(value) @@ -606,13 +607,13 @@ class NullBooleanField(BooleanField): def clean(self, value): """ Explicitly checks for the string 'True' and 'False', which is what a - hidden field will submit for True and False. Unlike the - Booleanfield we also need to check for True, because we are not using - the bool() function + hidden field will submit for True and False, and for '1' and '0', which + is what a RadioField will submit. Unlike the Booleanfield we need to + explicitly check for True, because we are not using the bool() function """ - if value in (True, 'True'): + if value in (True, 'True', '1'): return True - elif value in (False, 'False'): + elif value in (False, 'False', '0'): return False else: return None |
