7

2 つのフィールドを持つ Django モデルがありManyToManyます。モデルが保存されるたびに、モデルからデータを処理したいと考えています。

post_saveリレーションを保存する前にシグナルが送信されるため、そのシグナルはManyToMany使用できません。次に、m2m_changed信号がありますが、2 つのフィールドがあるためManyToMany、どのManyToManyフィールドに信号を配置すればよいかわかりません。

ManyToManyすべてのフィールドが保存された後にトリガーされるシグナルはありませんか?

4

1 に答える 1

3

m2m_change「このモデルのすべての関連データの保存が完了しました」にマップされるイベントや信号がないように見えるため、すべての後にデータを処理することが唯一のオプションのように感じます。

これが高コストである場合は、処理を非同期で処理できます。同様の状況に遭遇したとき、ブール値フィールドをモデルに追加して、処理に関連する状態を処理し (例: MyModel.needs_processing)、別の非同期タスク キュー (私の場合は Celery) が毎分スイープして処理を処理します/状態のリセット。

あなたの場合、m2m_changedneeds_processingがの場合、モデルをFalse設定needs_processingTrueて保存し、タスク キューで処理するようにマークすることができます。m2m_changedそうすれば、他の m2m フィールドに対して2 番目が発生した場合でも、重複した処理コストが発生することはありません。

于 2013-04-15T17:11:56.500 に答える