5

したがって、ForeignKeyによって関連付けられた2つのモデル(テーブル)があります。管理者の編集ページには、最初のモデル(たとえば、ModelOne)と、2番目のモデルの関連インスタンスであるModelTwo(TabularInline)が表示されます。

私が欲しいのは、2番目のモデルが変更されているときにいくつかの追加のアクションを実行することです。ModelTwoのpost_saveシグナルでこれを行うことができます。ただし、post_saveシグナルは、モデルを独自の編集ページ内から(つまり、ModelOneのインライン内ではなく)保存した場合にのみ呼び出されます。

ModelTwoのインラインフォームにpost_saveシグナルを添付する方法はありますか?

...回避策として、ModelTwoにカスタム検証を追加しました。これは、インラインかどうかに関係なく呼び出されます)、必要なメソッドを呼び出します。ただし、この設定から生じる問題は、ModelOneの新しいインスタンスを作成し、同時にModelTwoのインスタンスも作成する場合、2つのテーブルに関連する新しいインスタンスの主キー(外部キー)にアクセスできないことです(まだ保存されていません)。そして、主キーは私が必要とするものです。

また、post_saveシグナルをModelOneに直接追加しようとしましたが(新しいインスタンスのPKを取得できるように)、post_saveシグナルはModelTwoのデータを渡さないようです(とにかく、なぜそうする必要がありますか?)

それで、これに対する解決策は何ですか?インラインモデルは信号を発しますか?保存する前に新しいインスタンスのPKにアクセスする方法はありますか?

4

3 に答える 3

5

モデルはモデルです。モデルが管理インターフェイスでインラインとして使用されているという事実は、それを決して損なうものではありません。機能をオーバーライドしない限り、すべてのモデルは保存後のシグナルを発します。

モデルを保存すると、次のようになります。

于 2010-01-30T15:27:51.797 に答える
4

ほとんどの場合、ソリューションがシグナルで解決されたように見えた場合、さまざまな保存メソッドの 1 つをオーバーライドすることで、最終的により適切に解決されました。次の 2 つのメソッドのいずれかをオーバーライドすることで、保存時に追加のコードを挿入することに多くの成功を収めました。

  1. 管理オブジェクトのsave_model メソッド
  2. モデルの保存方法

信号はまだ便利ですが、この 2 か所では運が良かっただけです。

于 2010-01-30T15:31:30.947 に答える
3

上記はすべて正しいですが、さらに追加するだけです: オブジェクトを管理者 (インラインを含む) に保存すると、インラインの「保存後」シグナル (そしてもちろん、インライン オブジェクトの保存メソッド) のみがトリガーされます。インライン オブジェクトに変更を加えた場合。

于 2014-12-24T08:13:32.590 に答える