2011-05-03 77 views
2

如何根据另一个字段的存在条件验证字段。例如,只有在“国家”是“美国”时才需要“国家”。formencode有条件验证

感谢, 史蒂夫

编辑:

所以我想这样做:

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

但错误信息与代替 “国家” “_the_form” 相关联。有没有办法将它链接到该字段?

+0

我们可以得到一个代码示例,所以我们有更多的上下文吗? – MikeVaughan 2011-05-03 22:38:04

+0

我只使用默认验证器,在我的情况下“NotEmpty”。所以在我的例子中,我有两个表单域,State和Country,当Country是US时,我只希望State不为空。否则,国家可能是空的。 – steve 2011-05-04 19:28:19

回答

0

在我公司的一个项目中发生同样的问题。我们为此编写了我们自己的Formencode验证器。我们目前试图将它与主项目合并。在此期间,你可以在这里下载:https://github.com/GevatterGaul/formencode

还存在,还有一份HOWTO,德国: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仅在给定字段与给定值相匹配时才需要字段。在你的例子中,只有'国家'是'美国',那么它需要'国家'字段。

希望我能帮上忙。

+0

那里有更好的验证库。即时通讯使用这个工作原因,但有一个像'not_empty'这样的选项已经是我书中红旗的开始。 – dtc 2017-10-05 18:27:16