4

次のモデルがあります。

class Foo(DeclarativeBase):
    code = Column(u'code', String(length=255))
    ctype = Column(u'ctype', String(length=255))

別のフィールドに関して、あるフィールドを検証する必要があります。

例えば

if ctype == "bar" and code == "buzz": raise ValueError

コミット時にデータベースにオブジェクトとレコードを作成しないでください。例外が発生しなかった場合は、通常どおり作成します。

使ってみました。シンプルなバリデーターで、 before_insert マッパー イベント を使用して「before_insert」イベントをセットアップしようとし 、次のようなコードを記述しました。

def validate_foo(mapper, connection, target):
    if target.ctype == "bar" and target.code == "buzz":
        raise ValueError

event.listen(Foo, 'before_insert', validate_foo)

ctype == "bar" および code == "buzz" の場合、DB にオブジェクトを作成しません。例外は発生しません。ただし、Foo オブジェクト インスタンス (db なし) を作成します。

そのような検証を行う最良の方法は何ですか?

4

1 に答える 1