I've noticed that recent versions of web2py (1.85) create a different string in DB when form with checkboxes is serialised (compared to version 1.77).
db.define_table("aaa", db.Field("bbb"), migrate=False) db.aaa.bbb.widget = SQLFORM.widgets.checkboxes.widget db.aaa.bbb.requires = [IS_IN_SET(BBB_VALUES, multiple=True), IS_NOT_EMPTY()] Before what was stored in DB was a '|' separated list of checked options: |xxx|yyy|zzz| Now, it is a serialisation of a python list: ['xxx','yyy','zzz'] Obviously this breaks compatibility when I read the field from DB and try to parse the options. Interestingly setting default options on form display works "the old way": form=SQLFORM(db.aaa) form.vars.bbb = "|".join(BBB_VALUES)