Django не поддерживает этот уровень контроля над запросами к базе данных - как правило, вы не можете выполнять запросы, используя такие функции, как CAST.
В этом случае у вас есть несколько вариантов. Прежде всего, проще всего, вы можете просто взять объект datetime, возвращенный объектом ORM, и удалить дополнительную точность, используя datetime.replace()
.
Другой вариант, если вы знаете, что никогда не захотите, чтобы ваше приложение Django использовало какую-либо точность в обновленном поле вне дня, - это просто определить updated
в вашем models.py как models.DateField()
, а не models.DateTimeField()
. Это означает, что данные, возвращаемые моделью ORM, никогда не будут иметь точности сверх дня.
Наконец, я предполагаю, что вы используете самую последнюю версию Django (1.1), но в Django 1.2 (запланированной на 10 мая) вы сможете сделать следующее:
Foobar.objects.raw("select updater, cast(updated as date), count(id) from foobar group by updater, cast(updated as date)")
В результате (при условии, что столбцы и типы столбцов совпадают с тем, что вы определили в своей модели Foobar), будет обычный django ORM Queryset.