summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-10-20 12:21:07 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-10-20 12:21:07 +0000
commite38d54e19a219efedb1b466d77d917bdbb3445f6 (patch)
tree5ebaa72923e956ac1ae9cc6d8725fed7584c25d3
parent22ee68961a2bf44c6a395b7c746e6bdfceebf8f3 (diff)
Changed newforms.CheckboxInput widget to return False as its value when not
include in the form (since HTML form submission doesn't send unselected check boxes). Patch from SmileyChris. Refs #5104. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6563 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/newforms/widgets.py7
-rw-r--r--tests/regressiontests/forms/widgets.py6
2 files changed, 13 insertions, 0 deletions
diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py
index 2c235513d0..62e2815d0b 100644
--- a/django/newforms/widgets.py
+++ b/django/newforms/widgets.py
@@ -170,6 +170,13 @@ class CheckboxInput(Widget):
final_attrs['value'] = force_unicode(value) # Only add the 'value' attribute if a value is non-empty.
return u'<input%s />' % flatatt(final_attrs)
+ def value_from_datadict(self, data, files, name):
+ if name not in data:
+ # A missing value means False because HTML form submission does not
+ # send results for unselected checkboxes.
+ return False
+ return super(CheckboxInput, self).value_from_datadict(data, files, name)
+
class Select(Widget):
def __init__(self, attrs=None, choices=()):
super(Select, self).__init__(attrs)
diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py
index 1c3e873963..6b7c858041 100644
--- a/tests/regressiontests/forms/widgets.py
+++ b/tests/regressiontests/forms/widgets.py
@@ -276,6 +276,12 @@ u'<input type="checkbox" name="greeting" />'
>>> w.render('greeting', None)
u'<input type="checkbox" name="greeting" />'
+The CheckboxInput widget will return False if the key is not found in the data
+dictionary (because HTML form submission doesn't send any result for unchecked
+checkboxes).
+>>> w.value_from_datadict({}, {}, 'testing')
+False
+
# Select Widget ###############################################################
>>> w = Select()