【发布时间】:2019-08-12 11:40:26
【问题描述】:
我看到 peewee 有信号 http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals
但它只适用于delete_instance()。
出于我希望是显而易见的原因,Peewee 信号在以下情况下不起作用 您使用 Model.insert()、Model.update() 或 Model.delete() 方法。 这些方法生成执行超出范围的查询 ORM,并且 ORM 不知道哪些模型实例可能或 查询执行时可能不会受到影响。
信号通过挂钩到更高级别的 peewee API 来工作,例如 Model.save() 和 Model.delete_instance(),其中受影响的模型 实例是提前知道的。
那么,我如何在依赖的记录上使用信号,因为它在依赖上使用delete()?
def delete_instance(self, recursive=False, delete_nullable=False):
if recursive:
dependencies = self.dependencies(delete_nullable)
for query, fk in reversed(list(dependencies)):
model = fk.model
if fk.null and not delete_nullable:
model.update(**{fk.name: None}).where(query).execute()
else:
model.delete().where(query).execute()
return type(self).delete().where(self._pk_expr()).execute()
【问题讨论】:
标签: foreign-keys hook peewee cascading-deletes