1

有没有办法让Cerberus验证两个字段具有相同数量的元素?

例如,本文档将验证:

{'a': [1, 2, 3], b: [4, 5, 6]}

这不会:

{'a': [1, 2, 3], 'b': [7, 8]}

到目前为止,我已经提出了这个架构:

{'a': {'required':False, 'type'= 'list', 'dependencies':'b'},
 'b': {'required':False, 'type'= 'list', 'dependencies':'a'}}

但是没有规则可以测试两个字段的长度相等。

4

1 回答 1

4

使用自定义规则非常简单:

>>> from cerberus import Validator

>>> class MyValidator(Validator):
        def _validate_match_length(self, other, field, value):
            if other not in self.document:
                return False
            if len(value) != len(self.document[other]):
                self._error(field, 
                            "Length doesn't match field %s's length." % other)

>>> schema = {'a': {'type': 'list', 'required': True},
              'b': {'type': 'list', 'required': True, 'match_length': 'a'}}
>>> validator = MyValidator(schema)
>>> document = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> validator(document)
True
>>> document = {'a': [1, 2, 3], 'b': [7, 8]}
>>> validator(document)
False
于 2017-09-27T10:03:32.740 回答