在 SQLFORM 工厂中,为什么我的只读复选框字段未选中?
In SQLFORM factory, why is my readonly checkbox field unchecked?
所以这是我的控制器代码:
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" 字段为空,只读字段保留其值。
但是,如果验证失败(例如在 "something" 中没有提交任何内容),则 "some_flag" 复选框未选中 。另一个只读字段 "something_readonly" 保留其值。
一个错误,对吧?我该如何解决这个问题?我可以在视图中禁用 javascript 中的字段,但如果可能的话,我想要一个可以在控制器中完成的解决方案或解决方法。
是的,绝对是一个错误。作为解决方法,在验证失败后,您可以将 input
小部件的 checked
属性设置为 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))
所以这是我的控制器代码:
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" 字段为空,只读字段保留其值。
但是,如果验证失败(例如在 "something" 中没有提交任何内容),则 "some_flag" 复选框未选中 。另一个只读字段 "something_readonly" 保留其值。
一个错误,对吧?我该如何解决这个问题?我可以在视图中禁用 javascript 中的字段,但如果可能的话,我想要一个可以在控制器中完成的解决方案或解决方法。
是的,绝对是一个错误。作为解决方法,在验证失败后,您可以将 input
小部件的 checked
属性设置为 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))