次のモデルがあります。
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 なし) を作成します。
そのような検証を行う最良の方法は何ですか?