﻿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
34013	Support ordering by annotation transforms (e.g JSONObject/ArrayAgg transforms).	Eugene Morozov	Simon Charette	"Please see the example:

{{{
#!python
queryset = Model.objects.all().annotate(
    json_field=functions.JSONObject(
        test_pk=models.Value(100) + models.F(""pk""),
    ),
    test_pk_from_json_field=models.F(""json_field__test_pk""),
)
print(queryset.order_by(""json_field__test_pk""))  # AttributeError: 'JSONField' object has no attribute 'model'
print(queryset.order_by(""test_pk_from_json_field""))  # Successful
}}}

Full traceback for ordering by `json_field__test_pk`:
{{{
Traceback (most recent call last):
  File ""<console>"", line 1, in <module>
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/query.py"", line 256, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/query.py"", line 280, in __iter__
    self._fetch_all()
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/query.py"", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/query.py"", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 1162, in execute_sql
    sql, params = self.as_sql()
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 513, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 56, in pre_sql_setup
    order_by = self.get_order_by()
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 356, in get_order_by
    order_by.extend(self.find_ordering_name(
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 769, in find_ordering_name
    return [(OrderBy(transform_function(t, alias), descending=descending), False) for t in targets]
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py"", line 769, in <listcomp>
    return [(OrderBy(transform_function(t, alias), descending=descending), False) for t in targets]
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/query.py"", line 1666, in transform
    wrapped = previous(field, alias)
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/sql/query.py"", line 1641, in final_transformer
    return field.get_col(alias)
  File ""/usr/local/lib/python3.10/site-packages/django/db/models/fields/__init__.py"", line 397, in get_col
    if alias != self.model._meta.db_table or output_field != self:
AttributeError: 'JSONField' object has no attribute 'model'
}}}

It seems there is a lack of support JSONField in order_by queryset."	New feature	closed	Database layer (models, ORM)	dev	Normal	fixed	orm, json, ordering		Ready for checkin	1	0	0	0	0	0
