2017-09-23 95 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