我有以下模型:
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
不要在提交时在db中创建对象和记录。如果没有引起异常,则照常创建。
我试过用。 Simple validators 并尝试使用before_insert mapper event设置'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)。
进行此类验证的最佳方法是什么?
答案 0 :(得分:0)
我最终在DB中创建了触发器(我使用postgresql)。并在python代码中捕获完整性错误。