我正在使用 SQLFORM.factory 创建自定义表单。在这种形式中,我有一个字段:
Field('useraccount','unicode',default=None)
所以据我了解,当用户不提供此值时,request.vars.useraccount 将为无。但它宁愿显示空字符串值。我可以通过检查空字符串值将其转换为无,但我不想这样做。请建议我任何解决方案。
问问题
435 次
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)))
另外,请注意,设置default
值SQLFORM.factory
仅对预填充表单字段有用(在这种情况下,您没有预填充任何内容)。该default
属性的唯一其他用途是用于数据库插入,但由于该Field
对象不是 DAL 表模型的一部分,因此无论如何它都不会用于插入。
于 2013-09-05T13:52:50.987 回答