我正在使用SQLFORM.factory来创建自定义表单。在这种形式中,我有一个字段:
字段( 'useraccount', '的unicode',默认=无)
根据我的理解,当用户不提供此值时,request.vars.useraccount将为None。但它显示空字符串值。
我可以通过检查空字符串值将其转换为None,但我不想这样做。
请建议我任何解决方案。
答案 0 :(得分:0)
提交表单时,如果“useraccount”输入字段为空,则浏览器仍然会为该字段发送一个空字符串,这就是进入request.vars.useraccount
的内容。由于空字符串是字符串字段的有效值,因此web2py不会覆盖它并将其转换为None
- 如果要转换它,则必须明确地这样做。一种选择是创建一个自定义验证器,将空字符串转换为None。
def empty_to_none(value):
return (None if value == '' else value, None)
SQLFORM.factory(Field('useraccount', 'unicode', requires=empty_to_none))
验证器必须是一个可调用的,它接受一个值并返回一个元组,包括一个值(原始值或可能是它的转换版本,如本例所示)和None
(如果没有错误) )或错误消息。上面的验证器非常简单,可以很容易地移动到lambda:
SQLFORM.factory(Field('useraccount', 'unicode',
requires=lambda v: (None if v == '' else v, None)))
另请注意,在default
中设置SQLFORM.factory
值仅对预填充表单字段很有用(在这种情况下,您不会预先填充任何内容)。 default
属性的唯一其他用途是用于数据库插入,但由于此Field
对象不是DAL表模型的一部分,因此它不会用于插入。