There is a small bug in web2py's HTML checkbox helper:
>>> from gluon.html import *
>>> print INPUT(_type='radio', _value=2, value='2'])
<input checked="checked" type="radio" value="2" />
>>> print INPUT(_type='checkbox', _value=2, value=['1', '2', '3'])
<input type="checkbox" value="2" />
>>> print INPUT(_type='checkbox', _value='2', value=['1', '2', '3'])
<input checked="checked" type="checkbox" value="2" />
It's just a missing str() in the checkbox helper:
diff -r b3585c174233 gluon/html.py
--- a/gluon/html.py Sat Jan 29 09:53:43 2011 -0600
+++ b/gluon/html.py Sun Jan 30 01:00:39 2011 +0100
@@ -1502,7 +1502,7 @@
if not t:
t = self['_type'] = 'text'
t = t.lower()
- value, _value = self['value'], self['_value']
+ value, _value = self['value'], str(self['_value'])
if t == 'checkbox':
if not _value:
Maybe a test similar to this one could be added to gluon/tests/test_html.py:
assert str(INPUT(_type='checkbox', _value=2, value=['1', '2', '3'])) \
== str(INPUT(_type='checkbox', _value='2', value=['1', '2', '3']))
Background: The web2py book suggests that the default
"SQLFORM.widgets.multiple.widget" can be replaced with
"SQLFORM.widgets.checkboxes.widget" for list:reference fields. I tried it
but the checkboxes did not show any check marks because of the int/string
mismatch.
Cheers
Bernd