﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36352	Weird behavior of .values after a distinct in 5.1.8	Joseph Yu		"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.
}}}

Current workaround is to include the annotated field in .values like so

{{{
>>> d = c.filter(id=OuterRef('id')).values('schema', 'created')
>>> e = Tenant.objects.values('schema_name').annotate(created_at=Subquery(c.values('created')[:1]))
>>> e[:1]
<QuerySet [{'schema_name': 'sample', 'created_at': datetime.date(2024, 11, 4)}]>
}}}
"	Bug	new	Database layer (models, ORM)	5.1	Normal		.values, distinct	Joseph Yu	Unreviewed	0	0	0	0	0	0
