Как заполнить список items.count () из набора запросов, отсортированного по полю даты и времени - PullRequest
0 голосов
/ 20 августа 2009

Мне было трудно сформулировать заголовок, поэтому, пожалуйста, отредактируйте его, если он у вас получше

Я пытаюсь отобразить некоторую статистику с помощью pygooglechart. И я использую Django, чтобы получить элементы базы данных из базы данных.

У элементов базы данных есть поле даты и времени, по которому я хочу "отсортировать". Что я действительно хочу, так это заполнить такой список.

data = [10, 12, 51, 50]

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

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

Предполагая, что вы используете Django 1.1 или достаточно недавнюю проверку, вы можете использовать новые функции агрегирования . Что-то вроде:

counts = MyModel.objects.values('datettimefield').annotate(Count('datettimefield'))

На самом деле вы получаете список словарей:

[{'datetimefield':<date1>, 'datettimefield__count':<count1>},
 {'datetimefield':<date2>, 'datettimefield__count':<count2>}, ...]

но довольно просто написать список, чтобы получить нужный формат.

Отредактировано после комментария : Если вы работаете на 1.0.2, самое эффективное средство - использовать необработанный SQL.

cursor = connection.cursor()
cursor.execute(
     "SELECT COUNT(0) FROM `mymodel_table` "
     "GROUP BY `mydatetimefield`;"
)
counts = cursor.fetchall()
0 голосов
/ 20 августа 2009
...