在SQLFORM工厂中,为什么我的readonly复选框字段未选中?

时间:2016-04-01 21:06:49

标签: python web2py

所以这是我的控制器代码:

form = SQLFORM.factory(Field("something_readonly", writable=False, default="can't change")
                       ,Field("something", requires=IS_LENGTH(10,5))
                       ,Field("some_flag", "boolean", writable=False, default=True))
if form.process().accepted:
    print("validate")

return dict(form=form)

当我成功提交时,一切都显示出我的期望;也就是说,“something”字段为空,只读字段保留其值。

但是,如果验证失败(例如在“某事”中没有提交任何内容),则取消选中“some_flag”复选框。另一个只读字段“something_readonly”保留其值。

一个错误,对吗?我怎么能绕过这个?我可以在视图中禁用javascript中的字段,但我想要一个可以在控制器中完成的解决方案或解决方法,如果可能的话。

1 个答案:

答案 0 :(得分:1)

是的,绝对是个错误。作为解决方法,在验证失败后,您可以将checked窗口小部件的input属性设置为True

def fix_booleans(form):
    for fieldname in form.fields:
        field = form.table[fieldname]
        if field.type == 'boolean' and field.writable == False and field.default == True:
            form.custom.widget[fieldname]['_checked'] = True

form.process(onvalidation=dict(onfailure=fix_booleans))