簡體   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