Para corrigi-lo, anexe
order_by()
para consultar a cadeia. Isso substituirá a ordenação padrão do modelo Meta . Assim:Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by() #<------ here
.values('hour')
.annotate(count=Count('id'))
No meu ambiente ( Postgres também ):
>>> print ( Material
.objects
.extra({'hour': 'strftime("%%H", data_creacio)'})
.order_by()
.values('hour')
.annotate(count=Count('id'))
.query )
SELECT (strftime("%H", data_creacio)) AS "hour",
COUNT("material_material"."id") AS "count"
FROM "material_material"
GROUP BY (strftime("%H", data_creacio))
Saiba mais em order_by django docs :
Nota lateral :usando
extra()
pode introduzir vulnerabilidade de injeção de SQL
ao seu código. Use isso com precaução e escape de quaisquer parâmetros que o usuário possa introduzir. Comparar com documentos :