formencode 条件验证

2 投票
1 回答
849 浏览
提问于 2025-04-16 16:56

我想知道怎么根据另一个字段的值来验证一个字段的条件。比如说,只有当“国家”是“美国”时,“州”这个字段才是必填的。

谢谢,

史蒂夫

编辑:

我想到了这样做:

chained_validators = [validators.RequireIfPresent('state', present="country")]

但是错误信息是和“_the_form”关联的,而不是“州”这个字段。有没有办法把它关联到“州”字段上呢?

1 个回答

0

我在公司做项目的时候也遇到过同样的问题。我们为此写了一个自己的Formencode验证器。现在我们正在尝试把它合并到主项目中。与此同时,你可以在这里下载它:https://github.com/GevatterGaul/formencode

这里还有一个德语的使用指南:http://techblog.auf-nach-mallorca.info/2014/08/19/dynamische_formulare_validieren_mit_formencode/

让我给你简单介绍一下,结合你的例子:

from formencode import validators
v = validators.RequireIfMatching('country', expected_value='US', required_fields=['state'])
v.to_python(dict(country='US', state='Virginia'))

这个验证器的主要好处是,跟validators.RequireIfPresent相比,validators.RequireIfMatching只在某个字段的值符合特定条件时才要求填写另一个字段。在你的例子中,只有当'country'的值是'US'时,才会要求填写'state'字段。

希望这对你有帮助。

撰写回答