Django-simple-history は、ターゲット モデルの保存ごとに新しいレコードを挿入しています。docsでは、F 式の問題が説明されています。上書きされた保存方法でこれを回避しようとします。
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# some other actions
self.refresh_from_db()
しかし、これは機能していないようです。ベース モデルのシグナルは、呼び出しpost_save
の直後に呼び出されsuper().save()
ますか? もしそうなら、ターゲットモデルの更新でF式を維持するこの問題を解決する方法はありますか?
更新: 保存されたインスタンスには、F 式を使用して定義された属性の 1 つがあるため、このコードは他のモジュールで呼び出されます。
instance.some_attribute = (F('some_attribute') + 15)
instance.save(update_fields=['some_attribute'])
これにより、履歴テーブルpost_save
に の拡張コピーを挿入しようとすると、django-simple-history のシグナルでエラーがスローされます。実際の値が読み込まれるようにinstance
、オーバーライドされたsave
メソッドでインスタンスを更新して F 式を削除しようとしました。some_attribute
トレースバックから、呼び出しのpost_save
直後super().save()
、リフレッシュの前に が呼び出されたようです。オーバーライドされた保存が機能するDjango post_saveの方法はありますか? もしそうなら、更新コードを変更せず (F 式で更新を残す)、モデルの保存で挿入された履歴を解決する方法はありますか?