From 38056e82d70235129dd13e8e6f7d2d0e817e9bed Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 12 Apr 2010 14:22:16 +0000 Subject: [PATCH] [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 --- django/db/models/query.py | 3 ++- tests/regressiontests/delete_regress/tests.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/regressiontests/delete_regress/tests.py diff --git a/django/db/models/query.py b/django/db/models/query.py index 363a105056..846f931e82 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -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: diff --git a/tests/regressiontests/delete_regress/tests.py b/tests/regressiontests/delete_regress/tests.py new file mode 100644 index 0000000000..da1b89eda8 --- /dev/null +++ b/tests/regressiontests/delete_regress/tests.py @@ -0,0 +1,13 @@ +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)