I really didn’t think about how to translate to GROUP BYboth HAVINGDjango QuerySet.annotateand QuerySet.aggregate. I am trying to translate this SQL query into ORM by saying
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;
which outputs this:
[(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)]
My Django Model:
class Article(models.Model):
title = models.CharField(max_length=150, verbose_name=_("title"))
pub_date = models.DateTimeField(verbose_name=_('publishing date'))
This project should work on several different database systems, so I try to stay away from pure SQL as much as possible.