当我附加到处理程序中的属性事件(“append”)以取消追加操作时,是否可以?
假设我在处理程序中为每个附加记录进行了一些验证,如果记录没有通过验证我想要被删除。
答案 0 :(得分:1)
有关执行验证的其他方法,请参阅sqlalchemy.orm.validates,这会产生更清晰的代码。根据文件:
然后,该函数可以引发验证异常以停止该过程 来自continue(Python的内置ValueError和AssertionError) 例外是合理的选择),或者可以修改或替换值 在继续之前。否则该函数应返回给定的 值。
class User(...):
# ...
addresses = relationship("Address")
@validates('addresses')
def _modify_addresses(self, key, target):
if target.phone is None
raise ValueError("User addresses must have a phone number!")
return target
根据文档,您可以修改添加到集合的值。但要完全避免添加它,您需要引发异常。显然,您需要在外部代码中处理此异常:
def _add_addresses(user, address_list):
for address in address_list:
try:
user.addresses.append(address)
catch ValueError as _exc:
logging.warn("Could not add Address [%s] to the User [%s]", address, user.name)