我很难阻止创建一个对象后多次发射post_save信号。Django - 创建多个post_save信号后尽管dispatch_uid
我的信号被定义如下:
@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)
信号在订单导入/ 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创建:真和1与创建:假。我不认为问题在于信号可能会被多次导入,因为我提供了一个dispatch_uid,并且在同一个文件中定义的post_delete信号在单次删除时不会被多次触发。
任何人都可以启发我为什么发生这种情况?谢谢
您是否覆盖了订单模型保存,还可以附加为您创建订单的代码 – iklinac