モデル保存後にいくつかのステートメントを実行するためにdjangoのpost_saveシグナルを使用しています。djangoの変更されたフィールドを特定するpost_saveシグナル
class Mode(models.Model):
name = models.CharField(max_length=5)
mode = models.BooleanField()
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# do some stuff
pass
は、今私はmode
フィールドの値が変更されたかどうかに基づいて文を実行します。
@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# if value of `mode` has changed:
# then do this
# else:
# do that
pass
私はいくつかのSOFスレッドとブログを見ましたが、これに対する解決策は見つかりませんでした。それらのすべては、私のユースケースではないpre_saveメソッドまたはフォームを使用しようとしていました。 djangoドキュメントのhttps://docs.djangoproject.com/es/1.9/ref/signals/#post-saveにはこれを直接行う方法は記載されていません。
以下のリンクの回答は有望ですが、私はそれをどのように使用するのか分かりません。私はこれをデバッグするためにipdb
を使用したため、instance
に変数has_changed
があることがわかりましたので、最新のdjangoバージョンがサポートしているかどうかはわかりません。
Django: When saving, how can you check if a field has changed?
注意してください。このアプローチには長所[here](http://stackoverflow.com/questions/1355150)で論じられているように、欠点があります。一言で言えば、それは競争が激しいわけではなく、2つのpythonインスタンスが同じdb行を指していると間違っている可能性もあります。 –