DB の何かが変更されたときに一部のユーザーに通知する必要がある状況があります。私の考えは、何らかの種類の差分をキャッチpre_save
して通知し、それをメールで送信することです。post_save
通常はうまく機能しますが、m2m フィールドの差分を取得する方法がわかりません。
現時点では、次のようなものがあります。
def pre_save(sender, **kwargs):
pk = kwargs['instance'].pk
instance = copy.deepcopy(sender.objects.get(pk=pk))
tracking[sender] = instance
def post_save(sender, **kwargs):
instance = copy.deepcopy(kwargs['instance'])
print diff(instance, (tracking[sender])) # TODO: don't print, save diff somewhere
Diff 関数はすべてのモデルで機能するはずです (現時点では 4 つのモデル クラスがあります)。deepcopy を使用すると、古いモデルを保存できますが、m2m フィールドは別のテーブルにあるため、保存する方法がわかりません (はい、このデータを取得できることはわかっていますが、実行の瞬間にはどのフィールドかわかりません) m2m であり、モデルごとに異なるスロットを作成したくありません)。私が望むのは一般的な解決策であるため、通知部分について考えずに後でモデルを追加することができます。
私の計画は、スロットが生成した差分を消去するために、ビューの後にget_data()
関数clear_data()
を呼び出すことです。save()
これはこれを行う良い方法ですか?より良い方法はありますか?私のためにこの仕事をすることができるdjangoアプリケーションはありますか?
すみません、英語は私の母国語ではありません。