Non ho davvero trovato il modo di tradurre GROUP BY
e HAVING
in Django QuerySet.annotate
e QuerySet.aggregate
. Sto cercando di tradurre questo query SQL in ORM parlanoCome eseguire questa query GROUP BY nell'ORM di Django con annotazione e aggregato
SELECT EXTRACT(year FROM pub_date) as year, EXTRACT(month from pub_date) as month, COUNT(*) as article_count FROM articles_article GROUP BY year,month;
che Risulterà:
[(2008.0, 10.0, 1L), # year, month, number of articles
(2009.0, 2.0, 1L),
(2009.0, 7.0, 1L),
(2008.0, 5.0, 3L),
(2008.0, 9.0, 1L),
(2008.0, 7.0, 1L),
(2009.0, 5.0, 1L),
(2008.0, 8.0, 1L),
(2009.0, 12.0, 2L),
(2009.0, 3.0, 1L),
(2007.0, 12.0, 1L),
(2008.0, 6.0, 1L),
(2009.0, 4.0, 2L),
(2008.0, 3.0, 1L)]
Il mio modello Django:
class Article(models.Model):
title = models.CharField(max_length=150, verbose_name=_("title"))
# ... more
pub_date = models.DateTimeField(verbose_name=_('publishing date'))
Questo progetto dovrebbe funzionare su un paio di diversa Sistemi DB, quindi sto cercando di stare lontano dal puro SQL il più possibile.
bel trucco, grazie! Ho bisogno di questa query solo per una singola pagina, il che rende un po 'difficile giustificare due campi aggiuntivi. Ma usare 'extra' farà il lavoro per ora :) –
L'esempio' extra' che hai postato funziona alla grande. Vorrei poter superare questa risposta di più! –