Pour résoudre ce problème, ajoutez order_by()
pour interroger la chaîne. Cela supprimera l'ordre par défaut du modèle Meta . Comme ceci :
Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by() #<------ here
.values('hour')
.annotate(count=Count('id'))
Dans mon environnement ( Postgres aussi ):
>>> 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))
En savoir plus dans order_by django docs :
Remarque :en utilisant extra()
peut introduire une vulnérabilité d'injection SQL
à votre code. Utilisez-le avec précaution et échappez à tous les paramètres que l'utilisateur peut introduire. Comparer avec les docs :