Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ answer newbie questions, and generally made Django that much better: crankycoder@gmail.com Paul Collier <paul@paul-collier.com> Robert Coup David Cramer <dcramer@gmail.com> Pete Crosier <pete.crosier@gmail.com> Matt Croydon <http://www.postneo.com/> Jure Cuhalev <gandalf@owca.info> Loading django/db/models/deletion.py +7 −8 Original line number Diff line number Diff line Loading @@ -301,9 +301,8 @@ class Collector(object): pk_list = [obj.pk for obj in instances] query.delete_batch(pk_list, self.using) # send post_delete signals for model, obj in self.instances_with_model(): if not model._meta.auto_created: for obj in instances: signals.post_delete.send( sender=model, instance=obj, using=self.using ) Loading tests/modeltests/delete/tests.py +21 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,27 @@ class DeletionTests(TestCase): models.signals.post_delete.disconnect(log_post_delete) models.signals.post_delete.disconnect(log_pre_delete) def test_relational_post_delete_signals_happen_before_parent_object(self): deletions = [] def log_post_delete(instance, **kwargs): self.assertTrue(R.objects.filter(pk=instance.r_id)) self.assertEquals(type(instance), S) deletions.append(instance.id) r = R.objects.create(pk=1) S.objects.create(pk=1, r=r) models.signals.post_delete.connect(log_post_delete, sender=S) try: r.delete() finally: models.signals.post_delete.disconnect(log_post_delete) self.assertEquals(len(deletions), 1) self.assertEquals(deletions[0], 1) @skipUnlessDBFeature("can_defer_constraint_checks") def test_can_defer_constraint_checks(self): u = User.objects.create( Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ answer newbie questions, and generally made Django that much better: crankycoder@gmail.com Paul Collier <paul@paul-collier.com> Robert Coup David Cramer <dcramer@gmail.com> Pete Crosier <pete.crosier@gmail.com> Matt Croydon <http://www.postneo.com/> Jure Cuhalev <gandalf@owca.info> Loading
django/db/models/deletion.py +7 −8 Original line number Diff line number Diff line Loading @@ -301,9 +301,8 @@ class Collector(object): pk_list = [obj.pk for obj in instances] query.delete_batch(pk_list, self.using) # send post_delete signals for model, obj in self.instances_with_model(): if not model._meta.auto_created: for obj in instances: signals.post_delete.send( sender=model, instance=obj, using=self.using ) Loading
tests/modeltests/delete/tests.py +21 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,27 @@ class DeletionTests(TestCase): models.signals.post_delete.disconnect(log_post_delete) models.signals.post_delete.disconnect(log_pre_delete) def test_relational_post_delete_signals_happen_before_parent_object(self): deletions = [] def log_post_delete(instance, **kwargs): self.assertTrue(R.objects.filter(pk=instance.r_id)) self.assertEquals(type(instance), S) deletions.append(instance.id) r = R.objects.create(pk=1) S.objects.create(pk=1, r=r) models.signals.post_delete.connect(log_post_delete, sender=S) try: r.delete() finally: models.signals.post_delete.disconnect(log_post_delete) self.assertEquals(len(deletions), 1) self.assertEquals(deletions[0], 1) @skipUnlessDBFeature("can_defer_constraint_checks") def test_can_defer_constraint_checks(self): u = User.objects.create( Loading