Djangoのsaveメソッド内で、「指定のフィールドの値が更新されたかどうか」を判定する方法。
models.py
def save(self, *args, **kwargs):
# DBに保存しているデータを取得
old_obj = self._meta.model.objects.get(id=self.id)
if old_obj.field_name != self.field_name:
# 値が更新されたときの処理
field_name
の所に対象のフィールド名を指定します。
そもそもデータが新規作成されたか更新されたかは、saveメソッド内で self._state.adding
の値を参照することで判定できます。
こんな感じで pre_save
を使う方法もあります。対象のモデル以外にも影響を及ぼすコードを書く場合は pre_save
の方でやると良いかも。
@receiver(pre_save, sender=MyModel)
def hoge(sender, instance, **kwargs):
try:
old_obj = sender.objects.get(pk=instance.pk)
except sender.DoesNotExist:
# 新規作成された時の処理
else:
if old_obj.field_name != instance.field_name:
# 値が更新された時の処理