7

Marshmallow#validationから、スキーマの特定のフィールドにバリデーターを登録できることがわかりました。バリデータが失敗した場合、次のエラーが発生します:

data, errors = MySchema().load({"some":"data})

バリデーターに失敗したフィールドのエラー情報が含まれます。

errors
# => some error message for the field that failed 

私の質問: (個々のフィールド レベルではなく) スキーマ レベルで検証し、上記の方法でエラーを返すことは可能ですか?

MySchema().load()恣意的な例として、 n個の異なるキーを試行したことを検証したいとします。現在@pre_load、入力の構造とデータの形式が正しくないかどうかをチェックするメソッドがありますが、raise ValidationError('message')フィールド検証のように result.errors として返したいと思います。私のオプションは何ですか?

4

1 に答える 1

18

validates_schemaデコレーターを使用して、オブジェクト全体に対して検証を実行できます。

class MySchema(marshmallow.Schema):
    # ...

    @marshmallow.validates_schema(skip_on_field_errors=True)
    def validate_object(self, data):
        if data['foo'] < data['bar']:
            raise marshmallow.ValidationError(
                'Value should not be less than bar',
                ['foo']  # name of field to report error for
            )

異なるフィールドに対して複数のエラーを個別に報告したい場合でも、現時点では Marshmallow は異なるフィールドに対して複数の異なるエラーを報告することをサポートしていないため、個別の検証を個別のメソッドに入れる必要があります。

class MySchema(Schema):
    # ...

    @validates_schema
    def validate_foo(self, data):
        pass

    @validates_schema(skip_on_field_errors=True)
    def validate_bar(self, data):
        pass
于 2016-12-01T01:06:31.340 に答える