WTForms验证器.validators.optional:继续对空字段进行验证?

10

我遇到了WTForms validators.optional()的问题,因为如果字段为空,它会停止验证链(WTForms文档)。这意味着验证不会继续进行自定义函数,这可能导致类型错误。

代码示例:

class MyForm(form):
    myfield = TextField('My Field', [validators.Optional()])

    def validate_myfield(form, field):
        field.data = unicode(field.data)

是否有任何方法或解决方法,即使可选内容为空,也可以继续验证链,也许使用自定义验证器

如果我以错误的方式处理问题,提示正确方向将会很有帮助!


1
你为什么不能在验证器列表中的可选项之前放置自定义验证器呢?(验证器按顺序评估) - dagoof
你的评论很有帮助,请将其转为答案,以便我可以选择它。 - lecodesportif
1
出于好奇,如果字段为空,为什么需要继续验证?通常您只能以两种方式对空值做出反应,要么是错误(不可选),要么不是错误(可选),并且您以某种恒定的方式处理它(因为该值始终相同)。如果您遇到类型错误,是否尝试在验证器中执行不适合的操作?我不熟悉WTForms,但显然您可以创建自定义字段,以处理任何自定义解析要求。 - Aleksi Torhamo
对于空值,我正在使用验证器来有条件地更改field.data。该条件是来自另一个字段的数据。它有效,但也许自定义字段可以更好地处理这个问题? - lecodesportif
1
自定义字段似乎是处理这个问题的更好位置。我猜大多数人不会期望验证器修改任何数据。因此,使用自定义字段可以使代码更易于其他人理解。 - Aleksi Torhamo
1个回答

11

您可以更改验证器的排序方式。如果您的自定义验证器位于可选验证器之前,则它应该按照顺序提供所需的效果,因为它们是按顺序进行评估。


3
我知道这已经晚了10年,但在WTForms的更新版本中,添加Optional会取消所有其他验证检查。 - user3832673

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接