formato fecha django django-models django-aggregation

formato - fecha en django



Agrupación de las entradas del modelo de Django por día usando su campo de fecha y hora (1)

Estoy trabajando con un artículo como modelo que tiene un DateTimeField (auto_now_add = True) para capturar la fecha de publicación (pub_date). Esto se parece a lo siguiente:

class Article(models.Model): text = models.TextField() pub_date = models.DateTimeField(auto_now_add=True)

Quiero hacer una consulta que cuente cuántas entradas de artículos o entradas se han agregado por día. En otras palabras, quiero consultar las entradas y agruparlas por día (y eventualmente por mes, hora, segundo, etc.). Esto se parecería a lo siguiente en el shell de SQLite:

select pub_date, count(id) from "myapp_article" where id = 1 group by strftime("%d", pub_date) ;

Que devuelve algo así como:

2012-03-07 18:08:57.456761|5 2012-03-08 18:08:57.456761|9 2012-03-09 18:08:57.456761|1

Parece que no puedo entender cómo obtener ese resultado de un Django QuerySet. Soy consciente de cómo obtener un resultado similar utilizando itertools.groupby , pero eso no es posible en esta situación (explicación a seguir).

El resultado final de esta consulta se usará en un gráfico que muestra la cantidad de publicaciones por día. Estoy intentando usar el paquete Django Chartit para lograr este objetivo. Chartit pone una restricción en la fuente de datos (DataPool). La fuente debe ser un Model, Manager o QuerySet, por lo que el uso de itertools.groupby no es una opción por lo que puedo decir.

Entonces la pregunta es ... ¿Cómo agrupo o agrego las entradas por día y termino con un objeto QuerySet?


Cree un campo adicional que solo almacene datos de fecha (no de tiempo) y anote con Recuento:

Article.objects.extra({''published'':"date(pub_date)"}).values(''published'').annotate(count=Count(''id''))

El resultado será:

published,count 2012-03-07,5 2012-03-08,9 2012-03-09,1