2010-10-02 2 views
1

Мне нужно сделать этот запрос с помощью Django QuerySystem.Помощь с Django Query

SELECT DATE(`date`), count(*) 
FROM `maggie_item` 
GROUP BY DATE(`date`) DESC 

Моя модель:

Item

  • дата = DateTime
  • название = TextField

Я был бы признателен за вашу помощь

+0

актуальны: http://docs.djangoproject.com/en/dev/topics/db/aggregation/# themes-db-aggregation –

+0

также, http://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django –

+0

Можете ли вы также добавить модель? – 2010-10-02 22:49:30

ответ

3

Скажите, что ваша модель Item. Тогда:

from django.db.models import Count 
Item.objects.values('date').annotate(Count('id')) 

Группировка по датам вместо DateTimes:

Item.objects.extra(select = { 'date': "DATE(date)" }).values('date').annotate(Count('id')) 

Я только сделал это на Postgresql, где следующие работы, поэтому я предполагаю, что выше, будет работать для вас.

Item.objects.extra(select={'date' : "date_trunc('day', date)"}).values('date').annotate(Count('id')) 
+0

Это почти правильно, но мне нужно сгруппировать по DATE ('date') (Даты вместо datetimes). Например: Item.objects.values ​​('date'). Annotate (Count ('id')). Order_by ('date_date') –

+0

@Arturo: см. Мое обновление. – ars

+0

Рад помочь. :) – ars

0

я не нашел в любом случае, чтобы бросить и группа по использованию Django системы запросов, поэтому я использую курсор

from django.db import connection 

cursor = connection.cursor() 
cursor.execute("SELECT DATE(date), count(id) FROM maggie_item GROUP BY DATE(date) DESC") 
for a in cursor: 
    print a