2017-09-23 8 views
0

オブジェクトの作成後にpost_save信号が複数回発生するのを防ぐのに問題があります。Django - 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) 

1 Order.create後の信号に渡さkwargsからを印刷する場合、信号が注文/ apps.py

class OrdersConfig(AppConfig): 
    name = 'orders' 

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

     import orders.signals 

にインポートされる:

{'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つの作成では、1つのpost_save信号が生成され、argsが生成されます。 Trueを、作成した場合は1をFalseにします。私は、同じファイルに定義されているdispatch_uidとpost_deleteシグナルを1回の削除で複数回起動しないため、シグナルが複数回インポートされるという問題はないと思います。

誰も私にこれがなぜ起こっているのか教えてもらえますか?ありがとう

+0

オーダー・モデルの保存をオーバーライドしますか?また、オーダー・モデルを作成するコードを添付して – iklinac

答えて

0

あなたのシグナルpost_saveは問題ではありません、複数の保存トリガーです。

最初のオブジェクトが作成され、2回目のオブジェクトがフィールドの変更なしで更新される2回の保存を行っていることがわかりました。

ブール値を作成しました。新しいレコードが作成された場合はtrue。

update_fields

Model.save(に渡される、更新するフィールドのセット)、 またはNone update_fieldsは(保存するために渡されていない場合)。

+0

post_saveトリガーを更新することもできます。 – iklinac

+0

私は実際にコードのどこかで更新を見落としました。ありがとう – user2817219

関連する問題