【发布时间】:2015-03-20 18:46:38
【问题描述】:
我在WTForms 表单中有这个字段
name = StringField('Name', validators = [Optional(), Length(max = 100)])
当字段提交为空时,form.name.data 将如预期的那样包含一个空字符串。
有没有办法让它返回None 而不是空字符串?只是因为像update这样在数据库中处理null非常方便:
update t
set
name = coalesce(%(name)s, name),
other = coalesce(%(other)s, other)
使用上面的代码,我不需要检查该字段是否为空,并在 SQL 代码中的 Python 代码中采取相应的操作。 null 和 coalesce 可以轻松解决这个问题。
【问题讨论】:
-
我会说这是值得怀疑的,因为从浏览器接收到的 actual 数据实际上将包含该字段的空字符串。自己检查字段值并用
None替换空字符串有什么问题?例如。whatever_database.insert_record(form.name.data or None, form.other.data or None) -
@lanzz 怎么了... 没什么。只是我认为将逻辑留在它所属的地方(IMO)更干净;表单处理器
-
@lanzz 如果 WTForms 有任何工具可以自动重写表单数据...。确实有。检查我的答案。
-
有趣的是,如果表单数据来自 JSON POST(而不是 HTML 表单提交),则缺少键将导致来自
StringField的空字符串。这是违反直觉的 IMO,因为这意味着无法区分“用户没有为此字段输入值”和“用户提交了一个空字符串”,这在应用程序中可能具有非常不同的语义(它在我的)。
标签: python wtforms flask-wtforms