Django - 尽管 dispatch_uid 创建后有多个 post_save 信号

Django - Multiple post_save signals after create despite dispatch_uid

我无法阻止 post_save 信号在创建对象后多次触发。

我的信号定义如下:

@receiver(post_save, sender=Order, dispatch_uid='post_save_order')
def post_save_order(sender, **kwargs):
    instance = kwargs.get('instance')

    if instance.type == 'buy':
        delta = instance.quantity
    else:
        delta = instance.quantity * -1

    Balance.update(instance.user, instance.quote_currency, delta)

信号导入到orders/apps.py

class OrdersConfig(AppConfig):
    name = 'orders'

    def ready(self):
        super(OrdersConfig, self).ready()

        import orders.signals

在 1 Order.create 之后将传递的 kwargs 打印到信号时:

{'instance': object, 'signal': signal, 'using': 'default', 'update_fields': None, 'raw': False, 'created': True}
{'instance': object, 'signal': signal, 'using': 'default', 'update_fields': None, 'raw': False, 'created': False}

很明显,在一次创建中,有 1 个 post_save 信号被触发,args created: True 和 1 with created: False。我不认为问题是信号可能被多次导入,因为我提供了一个 dispatch_uid 和一个在同一文件中定义的 post_delete 信号不会在单个文件中多次触发删除。

谁能告诉我为什么会这样?谢谢

你的信号post_save没问题,多存档触发才是问题。

据我所知,您正在保存 2 次,其中第一次创建对象,第二次更新对象,没有任何字段更改。

created

A boolean; True if a new record was created.

update_fields

The set of fields to update as passed to Model.save(), or None if update_fields wasn’t passed to save().