PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Stündliche Gruppierung von Zeilen mit Django

Um dies zu beheben, hängen Sie order_by() an Kette abzufragen. Dadurch wird die Meta-Standardreihenfolge des Modells überschrieben . So:

Test
.objects
.extra({'hour': 'strftime("%%H", created_on)'})
.order_by()                                        #<------ here
.values('hour')
.annotate(count=Count('id'))

In meiner Umgebung (auch 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))

Weitere Informationen finden Sie in order_by django docs :

Nebenbemerkung :mit extra() kann SQL-Injection-Schwachstelle einführen zu deinem Code. Verwenden Sie dies mit Vorsicht und maskieren Sie alle Parameter, die der Benutzer eingeben kann. Mit Dokumenten vergleichen :