管理インターフェイスと同様の方法で、モデルの変更を追跡する Django アプリケーションを作成しています。たとえば、次のようなモデルへの変更のリストを表示できますChanged Status from Open to Closed
。
これを行うために pre_save シグナルを使用し、関連するフィールドをデータベース内の既存のアイテムと保存されている「インスタンス」と比較しています。既存のアイテムを取得するにsender._default_manager.get(pk=sender.pk)
は、少し面倒に思えることをしなければなりませんが、その部分はうまくいきます。
問題は、このモデルを変更するためのビューがsave()
フォームのメソッドを 2 回呼び出すことです (最初は commit=False で)。これは、pre_save シグナルが 2 回発行されるため、2 つの変更がデータベースに記録されることを意味します。
これを達成する方法はありますか?まったく別の方法かもしれませんが、Django 管理アプリはシグナルを使用してユーザーが行った変更を追跡することを読んだことを覚えています。