Reputation: 8764
I'm saving datetime
in the db for an object. I'd like to query against the db and select anything from todays date
, not datetime.
What's the easiest way to do this? This doesn't work:
invoice_for_today = Invoice.objects.get(user=user, date=date.today())
Upvotes: 52
Views: 87180
Reputation: 363
There is a new __date field lookup in Django 1.9 you can use:
Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))
Upvotes: 8
Reputation: 2053
obj = TeachersPlanner.objects.filter(date__startswith=date.today())
Upvotes: 14
Reputation: 20011
To get entries from the Last 24 hours you can use:
from datetime import datetime, timedelta
Entry.objects.filter(pub_date__gte = datetime.now() - timedelta(days=1))
Upvotes: 9
Reputation: 679
in django<1.9
from django.utils.timezone import datetime #important if using timezones
today = datetime.today()
foo_for_today = Foo.objects.filter(datefield__year=today.year, datefield__month=today.month, datefield__day=today.day)
in django>1.9, as they added the date keyword
foo_for_today = Foo.objects.filter(datefield__date=datetime.date.today())
Upvotes: 27
Reputation: 37177
I remember there being plans to add a __date
field lookup to make this easier, but as it stands the "standard" way of doing it is
today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
today_max = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
Invoice.objects.get(user=user, date__range=(today_min, today_max))
Upvotes: 68
Reputation: 617
You can also do something like this:
today = date.today()
invoice_for_today = Invoice.objects.filter(date__year=today.year, date__month=today.month, date__day=today.day)
Upvotes: 39
Reputation: 118671
Try using the keys date__gte
and date__lte
. You can pass in two datetime objects marking the boundaries of what you want to match.
Upvotes: 6