2

私は2つのモデルを持っています。1 つは MainModel と呼ばれ、もう 1 つは HistoricMainModel と呼ばれます。データが MainModel に挿入されるたびに、HistoricMainModel の行を自動的に INSERT したいと考えています。Djangoでこれを行う最善/正しい方法は何ですか?

よろしくお願いします、

4

3 に答える 3

9

すでにカスタムsave().-magic を使用している場合は、post_save()シグナルまたはを使用することをお勧めしpre_save()ます。

あなたのmodels.py

@receiver(pre_save, sender=MainModel)
def save_a_historicmodel(sender, **kwargs):
    #do your save historicmodel logic here

また

def save_a_historicmodel(sender, instance, created, **kwargs):
    print "Post save was triggered! Instance:", instance

signals.post_save.connect(save_a_historicmodel, sender=MainModel)

これは、保存されるたびにMainModelこのシグナルがトリガーされるように機能します。

ドキュメントはこちら

于 2013-03-01T10:41:40.470 に答える
2

これを自分で実装することもできますが、モデルの履歴/ロールバックを自動的に実装する django アプリのように、これを行うアプリケーションを使用するのが最善の方法です。reversion

実装するものに加えて、次のものreversionを提供します。

  1. 管理バックエンドとの統合。
  2. バージョンにメタデータを追加し、モデルの以前のバージョンに戻すためのAPI 。

これははるかに柔軟で、広く使用および実装されています。

于 2013-03-01T11:01:09.740 に答える
2

save「実際の」メソッドを呼び出す前に、HistoricMainModel オブジェクトを作成して挿入するように MainModel モデルのメソッドを書き直しますsave

于 2013-03-01T10:37:47.350 に答える