Я тоже борюсь с этим, вот более короткий пример, который, как я надеялся, будет работать с использованием зависимостей. Я публикую это как ответ (но вики сообщества), так как блок кода имеет тенденцию плохо выглядеть в комментариях. Надеюсь, что все в порядке, а не создавать отдельный вопрос.
Сокращенный воспроизводимый пример
schema = {
'field1': {
'required': True
},
'field2': {
'required': True,
'dependencies': {
'field1': 'one'
}
}
}
>>> document = {'field1': 'two'}
>>> v.validate(document, schema)
False
>>> print(v.errors)
{'field2': ['required field']}
Выполнение вышеизложенного, насколько я понимаю, сделает поле 2 обязательным, если поле 1 равно «единице».
Моя вторая попытка состояла в том, чтобы не делать это обязательным:
schema = {
'field1': {
'required': True
},
'field2': {
'required': False,
'dependencies': {
'field1': 'one'
}
}
}
Однако это проходит тесты:
>>> document = {'field1': 'one'}
>>> v.validate(document, schema)
True
>>> print(v.errors)
{}
И терпит неудачу только в том случае, если я пытаюсь указать значение в «поле2», когда «поле1» не имеет утвержденного значения:
>>> document = {'field1': 'two', 'field2': 'test'}
>>> v.validate(document, schema)
False
>>> print(v.errors)
{'field2': ["depends on these values: {'field1': 'one'}"]}
Поэтому я не думаю, что этот вариант использования поддерживается Cerberus, а если и поддерживает, то я еще не нашел подходящей комбинации.
person
Community
schedule
09.06.2020