使用Python Formencode验证器,有chained_validators RequireIfMissing和RequireIfPresent,允许在给定其他字段的状态或不存在的情况下的要求。它似乎只适用于单个字段,这意味着如果缺少一个字段,需要另一个字段或者如果存在一个字段,则需要另一个字段。一个人如何至少需要一个领域?
答案 0 :(得分:1)
下面的类:RequireAtLeastOne将获取一个字段列表,只有当至少存在一个字段时才会通过,如底部的成功和失败所示。
from formencode import Schema, validators, Invalid
from formencode.validators import FormValidator
class RequireAtLeastOne(FormValidator):
choices = []
__unpackargs__ = ('choices',)
def _convert_to_python(self, value_dict, state):
for each in self.choices:
if value_dict.get(each) is not None:
return value_dict
raise Invalid('You must give a value for %s' % repr(self.choices), value_dict, state)
class ValidateThings(Schema):
field1 = validators.String(if_missing=None)
field2 = validators.String(if_missing=None)
field3 = validators.String(if_missing=None)
chained_validators = [RequireAtLeastOne(['field1', 'field2', 'field3'])]
""" Success """
params = ValidateThings().to_python({"field2": 12})
params = ValidateThings().to_python({"field2": 12, "field3": 126})
params = ValidateThings().to_python({"field1": "foo", "field2": 12, "field3": 126})
""" Failure """
params = ValidateThings().to_python({})