Вот урезанное определение таблицы:
import django.contrib.postgres.fields as pg_fields
class MyTable(models.Model):
data = pg_fields.JSONField()
Я хотел бы написать ниже как чистый Django запрос вместо написания необработанных sql:
MyTable.objects.raw("""
SELECT
id,
(SELECT COUNT(*) FROM jsonb_object_keys(data)) AS val
FROM myapp_mytable
ORDER BY val
""")
(использование from django.db.models.expressions import RawSQL
допустимо в аннотации, если требуется)