diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 9fde8496e9..4d31c36175 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -1221,7 +1221,7 @@ class Query(BaseExpression): else: self.set_annotation_mask(set(self.annotation_select).difference({alias})) self.annotations[alias] = annotation - if self.selected: + if select and self.selected: self.selected[alias] = alias @property diff --git a/docs/releases/5.2.1.txt b/docs/releases/5.2.1.txt index 0f95eda848..53f18152ae 100644 --- a/docs/releases/5.2.1.txt +++ b/docs/releases/5.2.1.txt @@ -19,3 +19,7 @@ Bugfixes * Fixed a regression in Django 5.2 that caused a crash of ``QuerySet.bulk_create()`` with nullable geometry fields on PostGIS (:ticket:`36289`). + +* Fixed a regression in Django 5.2 that caused fields to be incorrectly + selected when using ``QuerySet.alias()`` after ``values()`` + (:ticket:`36299`). diff --git a/tests/annotations/tests.py b/tests/annotations/tests.py index 5df958c333..6c0d7b668c 100644 --- a/tests/annotations/tests.py +++ b/tests/annotations/tests.py @@ -1470,6 +1470,10 @@ class AliasTests(TestCase): with self.assertRaisesMessage(FieldError, msg): getattr(qs, operation)("rating_alias") + def test_alias_after_values(self): + qs = Book.objects.values_list("pk").alias(other_pk=F("pk")) + self.assertEqual(qs.get(pk=self.b1.pk), (self.b1.pk,)) + def test_alias_sql_injection(self): crafted_alias = """injected_name" from "annotations_book"; --""" msg = (