Je n'ai pas vraiment eu de problème pour traduire GROUP BY
et HAVING
en et QuerySet.aggregate
de Django. Je suis en train de traduire cette requête SQL en ORM parlerComment faire cette requête GROUP BY dans l'ORM de Django avec annoter et agréger
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;
qui sort ceci:
[(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)]
Mon modèle Django:
class Article(models.Model):
title = models.CharField(max_length=150, verbose_name=_("title"))
# ... more
pub_date = models.DateTimeField(verbose_name=_('publishing date'))
Ce projet devrait fonctionner sur deux différents Systèmes DB, donc j'essaie de rester loin de SQL pur autant que possible.
trick Nice, merci! J'ai besoin de cette requête seulement pour une seule page, ce qui rend un peu difficile de justifier deux champs supplémentaires. Mais utiliser 'extra 'fera l'affaire pour l'instant :) –
L'exemple' extra' que vous avez posté fonctionne très bien. Je souhaite que je pourrais upvote cette réponse plus! –