How can I filter a date of a DateTimeField in Django? How can I filter a date of a DateTimeField in Django? python python

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.