#36299: ORM Regressions in Django 5.2
-------------------------------------+-------------------------------------
Reporter: OutOfFocus4 | Type: Bug
Status: new | Component: Database
| layer (models, ORM)
Version: 5.2 | Severity: Normal
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
ORM calls that worked prior to Django 5.2 now return different results or
outright fail in Django 5.2. I have attached a file with proof-of-concept
tests.
The first issue I noticed is that calling `alias` on after `values_list`
adds the aliased value to the result set. I believe the root of this error
is in `django/db/models/sql/query.py` lines 1224 and 1225:
{{{#!python
if self.selected:
self.selected[alias] = alias
}}}
This code adds the alias to `selected` regardless of the value of the
`select` parameter.
Another issue I found causes queryset evaluation to raise an
`AttributeError`. The following code:
{{{#!python
with atomic():
values = (
User.objects.select_for_update(of=("self",))
.values_list(
Concat(F("first_name"), Value(" "), F("last_name")), "email"
)
.get(pk=12)
)
}}}
will fail with a stacktrace ending in `AttributeError: 'Concat' object has
no attribute 'target'`
--
Ticket URL: <
https://code.djangoproject.com/ticket/36299>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.