我有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信号文档也不太清楚。