0

私は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シグナルのドキュメントもあまり説明的ではありません。

4

0 に答える 0