Để khắc phục, hãy nối thêm order_by()
để truy vấn chuỗi. Điều này sẽ ghi đè thứ tự mặc định Meta của mô hình . Như thế này:
Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by() #<------ here
.values('hour')
.annotate(count=Count('id'))
Trong môi trường của tôi (cả 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))
Tìm hiểu thêm trong order_by django docs :
Ghi chú bên lề :using extra()
có thể giới thiệu lỗ hổng chèn SQL
mã của bạn. Sử dụng điều này một cách thận trọng và thoát khỏi bất kỳ thông số nào mà người dùng có thể giới thiệu. So sánh với tài liệu :