summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 19:22:03 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 19:22:03 +0000
commit7a166f1a1c126bea547ad00387ff134ee4743b1c (patch)
tree2cf70f6932c4588e0eccdb575e71edce50a19d54
parent4cbc8c62cf0f1e5408425c355cde7b021eb4a31e (diff)
Fixed #5959 -- Fixed handling of False values in hidden boolean fields. Thanks,
SmileyChris. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6745 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/newforms/fields.py9
-rw-r--r--tests/regressiontests/forms/fields.py10
-rw-r--r--tests/regressiontests/forms/widgets.py7
3 files changed, 22 insertions, 4 deletions
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index 9bb2ced583..9b1253de1f 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -536,11 +536,12 @@ class BooleanField(Field):
widget = CheckboxInput
def clean(self, value):
- "Returns a Python boolean object."
+ """Returns a Python boolean object."""
super(BooleanField, self).clean(value)
- # Explicitly check for the string '0', which is what as hidden field
- # will submit for False.
- if value == '0':
+ # Explicitly check for the string 'False', which is what a hidden field
+ # will submit for False (since bool("True") == True we don't need to
+ # handle that explicitly).
+ if value == 'False':
return False
return bool(value)
diff --git a/tests/regressiontests/forms/fields.py b/tests/regressiontests/forms/fields.py
index 3b93d70338..1c436ce680 100644
--- a/tests/regressiontests/forms/fields.py
+++ b/tests/regressiontests/forms/fields.py
@@ -914,6 +914,11 @@ False
>>> f.clean('Django rocks')
True
+>>> f.clean('True')
+True
+>>> f.clean('False')
+False
+
>>> f = BooleanField(required=False)
>>> f.clean('')
False
@@ -930,6 +935,11 @@ False
>>> f.clean('Django rocks')
True
+A form's BooleanField with a hidden widget will output the string 'False', so
+that should clean to the boolean value False:
+>>> f.clean('False')
+False
+
# ChoiceField #################################################################
>>> f = ChoiceField(choices=[('1', '1'), ('2', '2')])
diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py
index ea8cf135aa..0e69602103 100644
--- a/tests/regressiontests/forms/widgets.py
+++ b/tests/regressiontests/forms/widgets.py
@@ -129,6 +129,13 @@ u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u
>>> w.render('email', '', attrs={'class': 'special'})
u'<input type="hidden" class="special" name="email" />'
+Boolean values are rendered to their string forms ("True" and "False").
+>>> w = HiddenInput()
+>>> w.render('get_spam', False)
+u'<input type="hidden" name="get_spam" value="False" />'
+>>> w.render('get_spam', True)
+u'<input type="hidden" name="get_spam" value="True" />'
+
# MultipleHiddenInput Widget ##################################################
>>> w = MultipleHiddenInput()