1

管理インターフェイスと同様の方法で、モデルの変更を追跡する 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 管理アプリはシグナルを使用してユーザーが行った変更を追跡することを読んだことを覚えています。

4

3 に答える 3

1

dispatch_uid を使用します。

http://docs.djangoproject.com/en/1.2/topics/signals/#preventing-duplicate-signals

于 2011-03-06T13:54:20.537 に答える
0

Django 監査ログ

django-audit-logはプラグイン可能なアプリで、ほとんど手間をかけずに必要なことを正確に実行できます。私はプロジェクトでそれを使用しましたが、それを知ったので、きっともっと多くのプロジェクトで使用するでしょう.

于 2011-05-24T14:27:24.380 に答える