Вот фантастический пост в блоге, который освещает это здесь: Сравнение даты и времени в Django ORM
Лучшее решение для Django> 1.7, <1.9 - зарегистрировать преобразование: </p>
from django.db import models
class MySQLDatetimeDate(models.Transform):
"""
This implements a custom SQL lookup when using `__date` with datetimes.
To enable filtering on datetimes that fall on a given date, import
this transform and register it with the DateTimeField.
"""
lookup_name = 'date'
def as_sql(self, compiler, connection):
lhs, params = compiler.compile(self.lhs)
return 'DATE({})'.format(lhs), params
@property
def output_field(self):
return models.DateField()
Тогда вы можете использовать его в своих фильтрах следующим образом:
Foo.objects.filter(created_on__date=date)
EDIT
Это решение определенно зависит от сервера. Из статьи:
Конечно, эта реализация зависит от вашего специфического вида SQL, имеющего функцию DATE (). MySQL делает. Как и SQLite. С другой стороны, я лично не работал с PostgreSQL, но некоторые поиски в Google заставляют меня поверить, что у него нет функции DATE (). Поэтому такая простая реализация кажется, что она обязательно будет зависеть от серверной части.