web-dev-qa-db-ja.com

Djangoシグナル:update_fieldを条件として使用

誰かがDjangoシグナルのupdate_field引数を理解するのを手伝ってもらえますか?

ドキュメントによると

update_fields:save()メソッドで明示的に指定された更新するフィールドのセット。この引数がsave()呼び出しで使用されなかった場合はなし。

これが何を意味するのかよくわかりません。特定のフィールドが更新されない限り、シグナル関数が実行されないようにするために使用しようとしました。

@receiver(post_save, sender=SalesRecord)
def spawn_SaleSource_record(sender, update_fields, created, instance, **kwargs):
    if created or update_fields is 'sale_item' or 'sales_qty':
        *do function*

ただし、指定されていないフィールドが明示的に更新された場合でも、オブジェクトが保存される別のシグナル処理中に実行されるようです。

x = SalesRecord.objects.filter(paid_off=False, customer=instance.customer).first()
x.paid_off = True
x.save(update_fields=['paid_off'])

私はこれについて間違っていますか?

13
Adam Starrh

'sales_qty'は常にtrueであるため、条件は必要なものに対応していません。

あなたはあなたの状態が次のようになりたいです:

if created or 'sale_item' in update_fields or 'sales_qty' in update_fields:
13
gpichot