summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-04-09 13:24:13 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-04-09 13:24:13 +0000
commit040c18b17e854459c9eff39a4dbbacf6b5460f31 (patch)
tree6dca347b1556cb8de156276f87962f910a79b446
parent7b47609629692241848469fabc24fa798c0ac70b (diff)
Fixed #13309 -- Ensure that delete() deletes everything it should delete(). Thanks to craig.kimerer@gmail.com for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12941 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/query.py3
-rw-r--r--tests/regressiontests/delete_regress/tests.py8
2 files changed, 10 insertions, 1 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index b8b2340b3f..ad6d37f631 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -429,13 +429,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
index 7ebe5e86a4..26cd3c5ce9 100644
--- a/tests/regressiontests/delete_regress/tests.py
+++ b/tests/regressiontests/delete_regress/tests.py
@@ -106,3 +106,11 @@ class DeleteCascadeTests(TestCase):
self.assertEquals(PlayedWith.objects.count(), 0)
# first two asserts just sanity checks, this is the kicker:
self.assertEquals(PlayedWithNote.objects.count(), 0)
+
+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)