繁体   English   中英

模式内的Formencode复合验证器

[英]Formencode Compound Validators Inside Schemas

我正在尝试做一些我认为应该很简单的事情,但是我遇到了使其无法正常工作的问题。 这是我现在所拥有的,可以正常工作。

some_schema = Schema(

   multiples = ForEach(UnicodeString(), convert_to_list=True),
   single = OneOf(['a', 'b'])

)

我想做的是在将MaxLength验证器转换为unicode字符串列表后,在多值字段上应用它。 但是,它似乎不喜欢我使用化合物(例如All,Pipe)或自定义验证程序的任何尝试。 在我看来,这是最简单的方法。

some_schema = Schema(

   multiples = All(MaxLength(5), ForEach(UnicodeString(), convert_to_list=True)),
   single = OneOf(['a', 'b'])

)

根据文档,多值字段应转换为Unicode字符串列表,然后通过MaxLength验证程序运行,如果> 5个元素,则失败。 失败部分起作用:

>>> some_schema.to_python({'single':'a', 'multiples': range(6)})
>>> Invalid: multiples: Enter a value less than 5 characters long

但是,似乎应该通过的示例实际上失败了:

>>> some_schema.to_python({'single':'a', 'multiples': range(3)})
>>> Invalid: multiples: Please provide only one value

虽然formencode文档通常非常好,但是却无法阐明该主题。 查看源代码,这是Schema类的单个预期值异常。 我尝试将accepts_iterator=True参数传递给Schema,但这也失败了。

如何确定架构中的字段是一串unicode字符串且长度小于N?

回答了我自己的问题-您必须向MaxLength验证器提供accepts_iterator关键字。

some_schema = Schema(

   multiples = All(MaxLength(5, accepts_iterator=True), ForEach(UnicodeString(), convert_to_list=True)),
   single = OneOf(['a', 'b'])

)

可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM