2016-05-11 4 views
0
clicks = SellerClick.objects.extra({'date' : "date(timestamp)"}).values('date').annotate(count=Count('timestamp')) 

Модель имеет поле datetime, называемое timestamp которое было использовано. Сначала я преобразую поле datetime в поле даты. Тогда остальные гадают. Мне нужно сгруппировать, а затем подсчитать количество объектов каждой даты.Групповые объекты по датам

Таким образом, желаемым результатом будет дата, а затем подсчет, основанный на том, сколько объектов имеет эта дата в поле timestamp.

ответ

1

У вас есть все, кроме исходного запроса. Дополнительный sql, который вы передаете, не включает в себя выбор, поэтому вам нужно дать ему что-то, чтобы действовать.

clicks = SellerClick.objects.all() 
    .extra({'date' : "date(timestamp)"}) 
    .values('date') 
    .annotate(count=Count('timestamp')) 

Ref: StackOverflow: Count number of records by date in Django

+0

Что делать, если я использую фильтр вместо 'все()'? – User

+0

Тот же принцип, вам просто нужно дать ему что-то запросить, очевидно. Вы даже можете поместить select в '.extra()' и полностью исключить '.all()' или '.filter()', но прецедент кажется более подходящим для того, как вы это делаете. –

3

Я предпочитаю использовать аннотацию над дополнительной

from django.db.models.expressions import RawSQL 

SellerClick.objects.annotate(
    date=RawSQL('date(date_joined)',[]), 
).values('date').annotate(count=Count('date')))