2017-10-07 70 views
0

我確認與Cerberus的文件,大約是這樣的:並不是所有的子文檔中的字段必須存在我如何驗證映射字段中至少有一個Cerberus項目?

{"a_dict": {"field1": "test1", 
      "field2": "test2", 
      "field3": "test3"}} 

,而是一個應該。到目前爲止,我的模式是這樣的:

"a_dict": {"type": "dict", 
      "schema": {"field1": {"type": "string", 
           "required": False}, 
         "field2": {"type": "string", 
           "required": False}, 
         "field3": {"type": "string", 
           "required": False}}} 

我怎麼能強制執行該fieldX的至少一個提供?

此問題源自fom this問題。

回答

1

該做的伎倆:

string_field = {'type': 'string'} 
schema = {'a_dict': {'type': 'dict', 
        'minlength': 1, 
        'allow_unknown': False, 
        'schema': 
         {f: string_field for f in ('field1', 'field2', 'field3')} 
        }} 
  • minlength規則確保有一個在a_dict至少一個字段。
  • allow_unknown規則確保除field<1…3>之外沒有其他字段通過驗證。
  • 默認情況下,required規則爲False
相關問題