模式内的Formencode复合验证器

2024-09-22 14:35:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一些我认为应该直截了当的事情,但我在让它发挥作用时遇到了问题。这是我现在所拥有的,正如预期的那样。在

some_schema = Schema(

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

)

我想做的是在多值字段被转换为unicode字符串列表后,对其应用MaxLength验证器。然而,它似乎不喜欢我用复合(例如All,Pipe)或自定义验证器所做的任何尝试。在我看来,这是实现这一目标最直接的方法。在

^{pr2}$

根据文档,应该将多值字段转换为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参数传递给模式,但也失败了。在

如何确保模式中的字段是unicode字符串的列表并且长度小于N?在


Tags: to字符串文档true列表valueschemaunicode
1条回答
网友
1楼 · 发布于 2024-09-22 14:35:47

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

some_schema = Schema(

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

)

按预期工作。在

相关问题 更多 >