gpt4 book ai didi

django - 仅在事务完成后触发 post_save 信号

转载 作者:行者123 更新时间:2023-12-04 11:08:25 25 4
gpt4 key购买 nike

我已经编写了一些 API,它们各自的功能在事务 block 内执行。我调用save()一个/几个模型的实例上的方法(经过一些修改),并且还在中连续索引了该实例的一些JSON相关信息 Elasticsearch .我希望数据库回滚,即使由于某种原因 save()对于其中一个实例或索引到 Elasticsearch 失败。

现在,问题出现了,即使在事务 block 内,post_save()信号被调用,这是一个问题,因为一些通知是从这些信号触发的。

有没有办法触发post_save()只有在交易成功完成后才发出信号?

最佳答案

我认为最简单的方法是使用 transaction.on_commit() .这是一个使用 models.Model 子类 Photo 的示例只有在当前事务结束后才会与 Elasticsearch 对话:

from django.db import transaction
from django.db.models.signals import post_save

@receiver(post_save, sender=Photo)
def save_photo(**kwargs):
transaction.on_commit(lambda: talk_to_elasticsearch(kwargs['instance']))

请注意,如果 transaction.on_commit()在未处于事件事务中时执行,它将立即运行。

关于django - 仅在事务完成后触发 post_save 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com