Сигналы Django pre_delete и post_delete не синхронизированы при использовании очистки на промежуточных моделях - PullRequest
0 голосов
/ 05 августа 2011

У меня есть 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 также не очень понятна.

...