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。

例如。如果存在 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 信号文档也不是很解释。

4

0 回答 0