diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 29e33c075f..a1487c4f95 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -1407,6 +1407,8 @@ class SQLInsertCompiler(SQLCompiler): class SQLDeleteCompiler(SQLCompiler): @cached_property def single_alias(self): + # Ensure base table is in aliases. + self.query.get_initial_alias() return sum(self.query.alias_refcount[t] > 0 for t in self.query.alias_map) == 1 def _as_sql(self, query): diff --git a/tests/delete/tests.py b/tests/delete/tests.py index c32ebba83f..e1ec26bc1a 100644 --- a/tests/delete/tests.py +++ b/tests/delete/tests.py @@ -605,6 +605,12 @@ class DeletionTests(TestCase): class FastDeleteTests(TestCase): + def test_fast_delete_all(self): + with self.assertNumQueries(1) as ctx: + User.objects.all().delete() + sql = ctx.captured_queries[0]['sql'] + # No subqueries is used when performing a full delete. + self.assertNotIn('SELECT', sql) def test_fast_delete_fk(self): u = User.objects.create(