sql >> Database >  >> RDS >> PostgreSQL

Uurgroepering van rijen met Django

Om het op te lossen, voegt u order_by() . toe keten opvragen. Dit zal de standaardvolgorde van model Meta overschrijven . Zoals dit:

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

In mijn omgeving (ook 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))

Lees meer in order_by django docs :

Kanttekening :met behulp van extra() kan kwetsbaarheid voor SQL-injectie introduceren naar uw code. Gebruik dit met voorzorg en ontsnap aan alle parameters die de gebruiker kan invoeren. Vergelijk met documenten :




  1. MySQLdb - Controleer of rij bestaat Python

  2. Twee mysql_fetch_array-instructies in

  3. Django combineert AND- en OR-query's met ManyToMany-veld

  4. Maak tabellen met dynamische namen via de opgeslagen procedure