За да го коригирате, добавете order_by()
за верига за заявки. Това ще замени подреждането по подразбиране на мета модела . Като това:
Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by() #<------ here
.values('hour')
.annotate(count=Count('id'))
В моята среда (също Postgres):
>>> 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))
Научете повече в order_by django docs :
Странична бележка :използване на extra()
може да въведе уязвимост при инжектиране на SQL
към вашия код. Използвайте това с предпазливост и избягвайте всички параметри, които потребителят може да въведе. Сравнете с документи :