Commit 38056e82 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.1.X] Fixed #13309 -- Ensure that delete() deletes everything it should...

[1.1.X] Fixed #13309 -- Ensure that delete() deletes everything it should delete(). Thanks to craig.kimerer@gmail.com for the report

Backport of r12941 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12955 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent a67b35a0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -388,13 +388,14 @@ class QuerySet(object):
        # Delete objects in chunks to prevent the list of related objects from
        # becoming too long.
        seen_objs = None
        del_itr = iter(del_query)
        while 1:
            # Collect a chunk of objects to be deleted, and then all the
            # objects that are related to the objects that are to be deleted.
            # The chunking *isn't* done by slicing the del_query because we
            # need to maintain the query cache on del_query (see #12328)
            seen_objs = CollectedObjects(seen_objs)
            for i, obj in izip(xrange(CHUNK_SIZE), del_query):
            for i, obj in izip(xrange(CHUNK_SIZE), del_itr):
                obj._collect_sub_objects(seen_objs)

            if not seen_objs:
+13 −0
Original line number Diff line number Diff line
import datetime

from django.test import TestCase

from models import Book

class LargeDeleteTests(TestCase):
    def test_large_deletes(self):
        "Regression for #13309 -- if the number of objects > chunk size, deletion still occurs"
        for x in range(300):
            track = Book.objects.create(pagecount=x+100)
        Book.objects.all().delete()
        self.assertEquals(Book.objects.count(), 0)