Opened 6 months ago
Last modified 5 months ago
#36352 assigned Cleanup/optimization
Weird behavior of .values after a distinct in 5.1.8 — at Initial Version
| Reported by: | Joseph Yu | Owned by: | |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 5.0 |
| Severity: | Normal | Keywords: | .values, distinct |
| Cc: | Joseph Yu, Simon Charette | Triage Stage: | Accepted |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | yes |
| Easy pickings: | no | UI/UX: | no |
Description
Was upgrading from 4.2.20 to 5.1.8 when tests were failing with a certain query in our app.
Sample code (not actual code and table; only used one table in this case):
>>> a = Tenant.objects.filter(id__in=[1, 3]).values('id').annotate(schema=F('schema_name'), created=F('created_at'))
>>> b = Tenant.objects.filter(id=2).values('id').annotate(schema=F('schema_name'), created=F('created_at'))
>>> c = (a|b).distinct()
>>> d = c.filter(id=OuterRef('id')).values('schema')
>>> e = Tenant.objects.values('schema_name').annotate(created_at=Subquery(d.values('created')))
This throws an error in 5.1.8:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/user/.pyenv/versions/3.13.0/lib/python3.13/site-packages/django/db/models/query.py", line 1360, in values
clone = self._values(*fields, **expressions)
File "/Users/user/.pyenv/versions/3.13.0/lib/python3.13/site-packages/django/db/models/query.py", line 1355, in _values
clone.query.set_values(fields)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "/Users/user/.pyenv/versions/3.13.0/lib/python3.13/site-packages/django/db/models/sql/query.py", line 2462, in set_values
raise FieldError(
...<2 lines>...
)
django.core.exceptions.FieldError: Cannot select the 'created' alias. Use annotate() to promote it.
Note:
See TracTickets
for help on using tickets.