在中间模型上使用clear时,Django pre_delete和post_delete信号不同步

时间:2011-08-04 21:33:12

标签: django django-signals

我有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。

例如。 如果有C(c1,c2,c3)的实例将由于clear()而被删除。订单是 -

 pre_delete c1
 pre_delete c2
 pre_delete c3
 post_delete c3
 post_delete c2
 post_delete c1

在c2的pre_delete期间,c1仍然存在;它搞砸了计算。 我没有使用m2m_changed pre_clear / post_clear,因为我想挂钩C的各个删除,也将在clear()上调用。 这里有什么建议? Django信号文档也不太清楚。

0 个答案:

没有答案