如何在Cerberus中验证字段为仅含任意数量字符串元素的列表?
解决Cerberus中列表元素类型的精准验证问题
你当前写的规则'categories_id' : {'required' : False, 'type' : ['string','list']}之所以会让单个字符串通过验证,是因为你把string和list都设为了合法类型——这相当于允许字段要么是单个字符串,要么是列表,刚好和你想要的效果相反。
要实现字段要么不存在,要么是一个仅包含任意数量字符串元素的列表,你需要调整验证规则如下:
'categories_id': { 'required': False, 'type': 'list', # 明确限定字段必须是列表类型,单个字符串直接验证失败 'schema': {'type': 'string'} # 指定列表内的每一个元素都必须是字符串 }
规则细节解释:
'type': 'list':彻底排除单个字符串的合法性,强制字段只能是列表类型。'schema': {'type': 'string'}:定义列表元素的验证规则,确保列表里的每一项都是字符串,不管列表长度是多少(空列表也会通过验证)。
额外扩展需求:
如果需要禁止空列表(要求列表至少包含一个字符串元素),可以添加minlength规则:
'categories_id': { 'required': False, 'type': 'list', 'schema': {'type': 'string'}, 'minlength': 1 }
调整后的规则会严格拦截单个字符串的情况,只有传入符合要求的字符串列表,或者完全不传入该字段时,验证才会通过。
内容的提问来源于stack exchange,提问作者konradk
相关产品推荐
相关产品推荐

