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 对象实例(没有数据库)。

进行此类验证的最佳方法是什么?

4

1 回答 1

0

我最终在 DB 中创建了触发器(我使用 postgresql)。并在 python 代码中捕获完整性错误。

于 2013-11-05T15:19:34.520 回答