小编Dmi*_*nko的帖子

如何制定必要的规则取决于情况

我有一个很大的json文档,如果其他字段具有确切值,则应在其中输入某些字段。例如

document = {'is_realty_address': False, 'postcode': 111111}
Run Code Online (Sandbox Code Playgroud)

如果is_realty_address == False,则必须提供邮政编码。所有规则(“必需”除外)都应用于文档中存在的字段,因此当我拥有

document = {'is_realty_address': False}
Run Code Online (Sandbox Code Playgroud)

规则对我的情况无济于事,因为我有很多“有条件需要”的字段,这些字段取决于许多不同的字段。因此,规则将使我的架构非常复杂。依赖关系也不起作用。我试过了:

{'postcode': {'dependencies': {'is_realty_address': False}, 'required': True}}
Run Code Online (Sandbox Code Playgroud)

如果邮政编码没有出现在文档中,则返回错误,无论is_realty_address的值是多少

v = Validator()
print(v.validate({'is_realty_address': False}, schema))
print(v.errors)

print(v.validate({'is_realty_address': True}, schema))
print(v.errors)
Run Code Online (Sandbox Code Playgroud)

此代码返回:

False
{'postcode': ['required field']}
False
{'postcode': ['required field']}
Run Code Online (Sandbox Code Playgroud)

我还尝试实现验证方法:

def _validate_conditional_required(self, conditional_required, field, value):
    """
    :param conditional_required:
    :param field:
    :param value:
    :return:
    The rule's arguments are validated against this schema:
    {'type': 'dict'}
    """
    for conditional_field, conditional_value in conditional_required.items():
        if self.document[conditional_field] == conditional_value and field not in …
Run Code Online (Sandbox Code Playgroud)

python validation json cerberus

5
推荐指数
1
解决办法
1124
查看次数

标签 统计

cerberus ×1

json ×1

python ×1

validation ×1