Commit c346d358 authored by Alex Gaynor's avatar Alex Gaynor
Browse files

Merge pull request #642 from dcramer/patch-1

Send post_delete signals immediately
parents 4720117a a7ed09d1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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>
+7 −8
Original line number Diff line number Diff line
@@ -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
                    )
+21 −0
Original line number Diff line number Diff line
@@ -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(