2017-09-23 219 views
0

我很难阻止创建一个对象后多次发射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信号在单次删除时不会被多次触发。

任何人都可以启发我为什么发生这种情况?谢谢

+0

您是否覆盖了订单模型保存,还可以附加为您创建订单的代码 – iklinac

回答

0

您的信号post_save是不是一个问题,多保存触发它是。

从我所看到的你正在做的事情中保存2次,其中第一次创建对象并且第二次更新对象时没有任何字段更改。

创建

一个布尔值;如果创建了新记录,则为true。

update_fields

的字段集的更新作为传递给Model.save(), 或无如果update_fields未传递给保存()。

+0

post_save触发器也在更新中! – iklinac

+0

我确实忽略了代码中某处的更新,谢谢 – user2817219

相关问题