Группировка записей модели Django по дням с использованием поля даты и времени.

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

9
задан Community 23 May 2017 в 12:02
поделиться