2011-06-19 4 views
2

私はdjangoでアプリケーションを構築しており、履歴レコードを追加してモデルのデータの変更を追跡することに決めました。私はこれを達成するためにdjango-simple-historyを使用しています。このパッケージは、明らかに、post_save信号に履歴レコードを保存します。モデルのポストセーブを発行しない

バックグラウンドクエリを実行してデータを保存する必要がある場合など、履歴を保存せずにオブジェクトを保存することができます。私の質問は、「モデルがポストセーブ信号を出さないようにすることができますか?」

私は現在、この問題を回避する方法を持っています。私はそのレコードの履歴を表示するときにTrueに設定するブール変数を持っています。しかし、これは過去の記録が作成されるのを妨げるものではありません。

ありがとうございます。

答えて

2

私はシグナルが熱くないですが、シグナルが放出されるのを止めるのではなく、シグナルハンドラを変更する必要があると思います。モデルを保存した後、他の無関係のものを行う必要がある場合はどうすればよいですか?

先頭に次のコードを入れて、ジャンゴ・簡単な履歴/ simple_history/models.pyでcreate_historical_recordを()パッチを適用してみてください。

create_historical_record(self, instance, type): 
    if hasattr(instance, 'save_history') and not instance.save_history: 
     return 
    #rest of method 

あなたはまた、あなたのモデルインスタンスから履歴の追跡を外し、一時的に試みることができます後に再接続しますが、どこでそれを行うのかは分かりません。たぶんエラーが発生しやすいでしょう。

そうそう、あなたの可能性もサブクラスHistoricalRecords:

class OptHistoricalRecords(HistoricalRecords): 
    def create_historical_record(self, instance, type): 
     if hasattr(instance, 'save_history') and not instance.save_history: 
      return 
     else: 
      super(OptHistoricalRecords,self).create_historical_record(instance,type) 
+0

あなたがしたくない場合ライブラリ内の何かをパッチして、あなたは私の答えをここでチェックすることができますhttp://stackoverflow.com/questions/18505185/django-simple-history-with-without-historical-record-does-not-work-for-me/31789886# 31789886 – Meph

0

、その名前がsave_without_historical_recordcontribute_to_classをモデルに貢献します方法がありますされています

obj.some_field = new_value 
obj.save_without_historical_record() 
... 
# now create a record. 
obj.save() 
関連する問題