﻿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
32182	Nested KeyTransform errors when used with a subquery on PostgreSQL.	Hannes Ljungberg	Hannes Ljungberg	"Annotating a subquery which returns a JSONField and then applying a nested KeyTransform on that annotation results in a `TypeError`. 

Example:

{{{
NullableJSONModel.objects.annotate(
    subquery_value=models.Subquery(
        NullableJSONModel.objects.filter(id=OuterRef(""id"")).values(""value"")[:1]
    ),
    expr=KeyTransform(""foo"", KeyTransform(""bar"", ""subquery_value"")),
)
}}}

{{{
Traceback (most recent call last):
  File ""/tests/django/tests/model_fields/test_jsonfield.py"", line 421, in test_nested_key_transform_on_subquery
    [self.objs[4]],
  File ""/usr/local/lib/python3.6/unittest/case.py"", line 1005, in assertSequenceEqual
    difflib.ndiff(pprint.pformat(seq1).splitlines(),
  File ""/usr/local/lib/python3.6/pprint.py"", line 58, in pformat
    compact=compact).pformat(object)
  File ""/usr/local/lib/python3.6/pprint.py"", line 144, in pformat
    self._format(object, sio, 0, 0, {}, 0)
  File ""/usr/local/lib/python3.6/pprint.py"", line 161, in _format
    rep = self._repr(object, context, level)
  File ""/usr/local/lib/python3.6/pprint.py"", line 393, in _repr
    self._depth, level)
  File ""/usr/local/lib/python3.6/pprint.py"", line 405, in format
    return _safe_repr(object, context, maxlevels, level)
  File ""/usr/local/lib/python3.6/pprint.py"", line 555, in _safe_repr
    rep = repr(object)
  File ""/tests/django/django/db/models/query.py"", line 256, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File ""/tests/django/django/db/models/query.py"", line 280, in __iter__
    self._fetch_all()
  File ""/tests/django/django/db/models/query.py"", line 1320, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File ""/tests/django/django/db/models/query.py"", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File ""/tests/django/django/db/models/sql/compiler.py"", line 1147, in execute_sql
    sql, params = self.as_sql()
  File ""/tests/django/django/db/models/sql/compiler.py"", line 498, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File ""/tests/django/django/db/models/sql/compiler.py"", line 55, in pre_sql_setup
    self.setup_query()
  File ""/tests/django/django/db/models/sql/compiler.py"", line 46, in setup_query
    self.select, self.klass_info, self.annotation_col_map = self.get_select()
  File ""/tests/django/django/db/models/sql/compiler.py"", line 262, in get_select
    sql, params = self.compile(col)
  File ""/tests/django/django/db/models/sql/compiler.py"", line 428, in compile
    sql, params = vendor_impl(self, self.connection)
  File ""/tests/django/django/db/models/fields/json.py"", line 305, in as_postgresql
    return '(%s %s %%s)' % (lhs, self.postgres_nested_operator), params + [key_transforms,]
TypeError: can only concatenate tuple (not ""list"") to tuple
}}}"	Bug	closed	Database layer (models, ORM)	3.1	Release blocker	fixed			Ready for checkin	1	0	0	0	0	0
