summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/sql/subqueries.py2
-rw-r--r--docs/releases/1.9.1.txt3
-rw-r--r--tests/delete/tests.py12
3 files changed, 16 insertions, 1 deletions
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py
index 35c814f903..266b6a017c 100644
--- a/django/db/models/sql/subqueries.py
+++ b/django/db/models/sql/subqueries.py
@@ -68,7 +68,7 @@ class DeleteQuery(Query):
# We can't do the delete using subquery.
values = list(query.values_list('pk', flat=True))
if not values:
- return
+ return 0
return self.delete_batch(values, using)
else:
innerq.clear_select_clause()
diff --git a/docs/releases/1.9.1.txt b/docs/releases/1.9.1.txt
index bc4a0be8ad..eee5a88737 100644
--- a/docs/releases/1.9.1.txt
+++ b/docs/releases/1.9.1.txt
@@ -34,3 +34,6 @@ Bugfixes
created by ``startapp`` on Python 2 (:ticket:`25909`). Add this line to your
own ``apps.py`` files created using Django 1.9 if you want your migrations
to work on both Python 2 and Python 3.
+
+* Prevented ``QuerySet.delete()`` from crashing on MySQL when querying across
+ relations (:ticket`25882`).
diff --git a/tests/delete/tests.py b/tests/delete/tests.py
index c50f95e126..e874321744 100644
--- a/tests/delete/tests.py
+++ b/tests/delete/tests.py
@@ -502,3 +502,15 @@ class FastDeleteTests(TestCase):
# that + fast delete of the related objs.
self.assertNumQueries(2, a.delete)
self.assertEqual(User.objects.count(), 0)
+
+ def test_fast_delete_empty_no_update_can_self_select(self):
+ """
+ #25932 - Fast deleting on backends that don't have the
+ `no_update_can_self_select` feature should work even if the specified
+ filter doesn't match any row.
+ """
+ with self.assertNumQueries(1):
+ self.assertEqual(
+ User.objects.filter(avatar__desc='missing').delete(),
+ (0, {'delete.User': 0})
+ )