私は、DBの内容が変更されたときに何人かのユーザーに通知する必要がある状況があります。私の考えはpre_save
とpost_save
シグナルをキャッチして、ある種のdiffとメールを作成することです。一般的にはうまくいきますが、m2mフィールドの差分を取得する方法はわかりません。差分関数は(私は4つのモデルクラスを持っているmommetで)すべてのモデルのために働く必要がありManyToManyフィールドのDiffangモデルオブジェクト
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
:私はこのような何かを持っている瞬間
。 deepcopyでは古いモデルを保存できますが、m2mフィールドを別のテーブルに保存する方法はわかりません(はい、このデータを取得できますが、実行時にはどのフィールドがm2mと私はすべてのモデルのための異なるスロットを作成したくない)。私が望むのはジェネリックソリューションなので、後で通知部分を考えずにモデルを追加できます。
私の計画では、save()
の後にget_data()
とclear_data()
関数を呼び出して、スロットが生成したdiffを消去することを目指しています。
これを行うよい方法はありますか?より良い方法がありますか?私のためにこの仕事をすることができるdjangoアプリケーションはありますか?
すみません、私の母国語ではありません。