У меня есть 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, c1 все еще присутствует;это мешает вычислениям.Я не использую m2m_changed pre_clear / post_clear, потому что я хочу подключить отдельные удаления C, которые также будут вызываться в clear ().Любые предложения здесь?Документация по сигналам Django также не очень понятна.