request.vars.variablename给出空字符串而不是None

时间:2013-09-05 12:23:34

标签: python web2py

我正在使用SQLFORM.factory来创建自定义表单。在这种形式中,我有一个字段:
    字段( 'useraccount', '的unicode',默认=无)
根据我的理解,当用户不提供此值时,request.vars.useraccount将为None。但它显示空字符串值。 我可以通过检查空字符串值将其转换为None,但我不想这样做。 请建议我任何解决方案。

1 个答案:

答案 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表模型的一部分,因此它不会用于插入。