2012-12-10 11 views
5

Ho un modello in cui utilizzo Django ORM per estrarre il valore medio dalla tabella. Voglio arrotondare quel valore medio, come faccio a fare questo?Django ORM come arrotondare un risultato medio

Vedere di seguito Sto estraendo il prezzo medio dal modello Prezzi raggruppato per data nel formato AAAA-MM, voglio estrarre automaticamente i valori medi arrotondati al numero più vicino.

rs = Prices.objects.all.extra(select={ 
    'for_date': 'CONCAT(CONCAT(extract(YEAR from for_date), "-"), 
     LPAD(extract(MONTH from for_date), 2, "00"))' 
    }).values('for_date').annotate(price=Avg('price')).order_by('-for_date') 
+1

non trovo una funzione rotonda sul Django set di query di riferimento api, perché non utilizzare il round nativo pitone() per arrotondare i risultati restituiti? – jxs

+0

Hai lavorato per caso? –

risposta

16

Usa Func() expressions (disponibile dal 1.8).

Ecco un esempio utilizzando il modello Prenota da Django Aggregation topic guide per arrotondare al secondo decimale in SQLite:

class Round(Func): 
    function = 'ROUND' 
    template='%(function)s(%(expressions)s, 2)' 

Book.objects.all().aggregate(Round(Avg('price'))) 
+0

A seconda della complessità della propria annotazione o aggregazione, potrebbe essere necessario assegnare un alias. ad es. 'Book.objects.all(). Aggregate (rounded_avg_price = Round (Avg ('price')))' – Duncan