これを修正するには、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 djangodocs をご覧ください。 :
サイドノート :extra()
を使用する SQLインジェクションの脆弱性
が発生する可能性があります あなたのコードに。これは注意して使用し、ユーザーが導入できるパラメーターはすべてエスケープしてください。 docsと比較 :