Я работаю с моделью типа Article, которая имеет DateTimeField(auto_now_add=True) для фиксации даты публикации (pub_date). Это выглядит примерно так:
class Article(models.Model):
text = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
Я хочу сделать запрос, который подсчитывает, сколько статей или записей было добавлено за день. Другими словами, я хочу запросить записи и сгруппировать их по дням (и, в конечном итоге, по месяцам, часам, секундам и т. д.). В оболочке SQLite это будет выглядеть примерно так:
select pub_date, count(id) from "myapp_article"
where id = 1
group by strftime("%d", pub_date)
;
Что вернет что-то вроде:
2012-03-07 18:08:57.456761|5
2012-03-08 18:08:57.456761|9
2012-03-09 18:08:57.456761|1
Я не могу понять, как получить этот результат из Django QuerySet. Я знаю, как получить аналогичный результат с помощью itertools.groupby, но в данной ситуации это невозможно (объяснение ниже).
Конечный результат этого запроса будет использован в виде графика, показывающего количество сообщений в день. Я пытаюсь использовать пакет Django Chartitдля достижения этой цели. Chartit накладывает ограничение на источник данных (DataPool). Источник должен быть Model, Manager или QuerySet, поэтому, насколько я могу судить, использование itertools.groupby не вариант.
Итак, вопрос... Как сгруппировать или агрегировать записи по дням и получить объект QuerySet?