How can I filter a date of a DateTimeField in Django?
Such lookups are implemented in django.views.generic.date_based
as follows:
{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
Because it is quite verbose there are plans to improve the syntax using __date
operator. Check "#9596 Comparing a DateTimeField to a date is too hard" for more details.
YourModel.objects.filter(datetime_published__year='2008', datetime_published__month='03', datetime_published__day='27')
// edit after comments
YourModel.objects.filter(datetime_published=datetime(2008, 03, 27))
doest not work because it creates a datetime object with time values set to 0, so the time in database doesn't match.
Here are the results I got with ipython's timeit function:
from datetime import datetoday = date.today()timeit[Model.objects.filter(date_created__year=today.year, date_created__month=today.month, date_created__day=today.day)]1000 loops, best of 3: 652 us per looptimeit[Model.objects.filter(date_created__gte=today)]1000 loops, best of 3: 631 us per looptimeit[Model.objects.filter(date_created__startswith=today)]1000 loops, best of 3: 541 us per looptimeit[Model.objects.filter(date_created__contains=today)]1000 loops, best of 3: 536 us per loop
contains seems to be faster.