0

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

4

1 回答 1

0

提交表单时,如果“useraccount”输入字段为空,浏览器仍会为该字段发送一个空字符串,因此进入request.vars.useraccount. 由于空字符串是字符串字段的有效值,web2py 不会覆盖它并将其转换为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)))

另外,请注意,设置defaultSQLFORM.factory仅对预填充表单字段有用(在这种情况下,您没有预填充任何内容)。该default属性的唯一其他用途是用于数据库插入,但由于该Field对象不是 DAL 表模型的一部分,因此无论如何它都不会用于插入。

于 2013-09-05T13:52:50.987 回答