[英]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.