私は3つのモデルを持っています
class A(models.Model):
...some fields..
class B(models.Model):
a = models.ManyToManyField(A, through='C')
class C(models.Model):
a = models.ForeignKey(A)
b = models.FoeignKey(B)
...some extra fields..
関係が変更されるたびに、djangoシグナルを使用して計算を行っています。明示的な中間モデルが指定されているため、m2m_changedを使用して削除することはできません。だから私はpre_deleteを使っていました。関係のいずれかの側でclear()が呼び出される場合を除いて、すべて問題ありません。clear()を呼び出すと、中間モデルでdeleteが呼び出され、pre_deleteとpost_deleteが実行されます。削除の順序を確認してみました。最初にすべてのpre_deletesが起動され、次にすべてのpost_deletesが起動されます。
たとえば。clear()の結果として削除されるC(c1、c2、c3)のインスタンスがある場合。順序は-
pre_delete c1
pre_delete c2
pre_delete c3
post_delete c3
post_delete c2
post_delete c1
c2のpre_deleteの間、c1はまだ存在しています。それは計算を混乱させています。clear()でも呼び出されるCの個々の削除にフックしたいので、m2m_changed pre_clear/post_clearを使用していません。ここに何か提案はありますか?Djangoシグナルのドキュメントもあまり説明的ではありません。