我如何验证某个类型是一个列表,并且它只包含未知数量的字符串元素?
我目前的解决方案是
'categories_id' : {'required' : False, 'type' : ['string','list']},
但它并没有起到作用,当你只提供一个字符串,而不是在列表中时,它也会返回True
。
问题'categories_id' : {'required' : False, 'type' : ['string','list']}
中提到的模式使Cerberus检查categories_id
字段是字符串还是列表。因此,单个字符串将返回true。
为了让Cerberus检查categories_id
是一个包含任意项目数的字符串列表,应该使用以下模式
{'categories_id': {'required': False, 'type': 'list', 'schema': {'type': 'string'}}}
我还没有找到使用cerberus
实现这一点的方法,但它应该非常简单,没有任何模块:
def validate(l):
if isinstance(l, list):
return all(isinstance(I, str) for i in l)
这可以使用valuesrules
完成
>>> schema = {'categories_id':
... {'type': 'list',
... 'valuesrules': {'type': 'string'}}}