Я работаю с моделью, подобной статье, которая имеет 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?