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