0

この検証を受け入れ可能なものとして取得しようとして Trueいますが、フィールドのいずれかが可能ですempty: True(デフォルトではわかっています)が、空でない場合は、すべての連続した条件を適用する必要があります。

スキーマv = Validator()

schm = {'l_addrsch': {'type': 'string', 'empty': True, 'allowed': ['m', 'o', 'e', 'M', 'O', 'E'], 'dependencies': ['l_nrefaddr', 'l_refaddr']},
    'l_nrefaddr': {'type': 'integer', 'empty': True, 'dependencies': ['l_addrsch', 'l_refaddr']},
    'l_refaddr': {'type': 'integer', 'empty': True, 'dependencies': ['l_addrsch', 'l_nrefaddr']}}

役職val = v.validate(p, schema)

{ 
"l_addrsch" : "",
"l_nrefaddr" : "",
"l_refaddr" :  ""
}

応答

    [
    {
        "l_addrsch": [
            "unallowed value "
        ],
        "l_nrefaddr": [
            "must be of integer type"
        ],
        "l_refaddr": [
            "must be of integer type"
        ]
    }
]

あまり混乱していないことを願っています。

EDIT 1:正規化ルール「デフォルト」で述べたようにこれを試しました:

schema = {'l_addrsch': {'type': 'string', 'default': '', 'allowed': ['', 'm', 'o', 'e', 'M', 'O', 'E'], 'dependencies': ['l_nrefaddr', 'l_refaddr']},
                'l_nrefaddr': {'type': 'integer', 'default': 0, 'dependencies': ['l_addrsch', 'l_refaddr']},
                'l_refaddr': {'type': 'integer', 'default': 0, 'dependencies': ['l_addrsch', 'l_nrefaddr']}

役職:

   { "l_addrsch" : "",
    "l_nrefaddr" : "",
    "l_refaddr" :  ""}

しかし、整数に対して機能させるためにまだ何かが欠けているようです

[
    {
        "l_nrefaddr": [
            "must be of integer type"
        ],
        "l_refaddr": [
            "must be of integer type"
        ]
    }
]
4

2 に答える 2

0

検証は次の 2 つの理由で失敗します。

  1. ''値として定義されていないallowed場合、このルールセットはフィールドに必要なものを達成する必要がありl_addrschます:

    'l_addrsch': {'type': string, 'allowed': ('', 'm', 'o', 'e', 'M', 'O', 'E'), 'required': True}

    更新: Cerberus 1.2 では、許可された値がチェックされない空のフィールド (許可されている場合) を持つことができます (このコミットを参照)。

  2. 文字列 ( '') が他の 2 つのフィールドの値として渡されるため、もちろん、type制約付きで失敗しますinteger。常に意味する場合は、入力値の強制を追加する必要があります。''0

于 2017-09-24T11:05:08.937 に答える