Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looking up relative dates from Django DateTimeField

Tags:

python

django

model:

class MyClass(models.Model):
    car = models.ForeignKey(Car)
    date = models.DateTimeField(auto_now=True, auto_now_add=True)

sql:

SELECT car FROM cars_myclass WHERE date < NOW() - INTERVAL 1 DAY;

So, I have something like:

cars = MyClass.objects.all().filter(date < ... )

But how to write NOW() - INTERVAL 1 DAY ? Thanks.

like image 814
Lev Avatar asked Nov 30 '25 19:11

Lev


1 Answers

Pass datetime.datetime object (substracted by datetime.timedelta object):

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 12, 29, 21, 54, 30, 836000)
>>> now - datetime.timedelta(days=1)
datetime.datetime(2013, 12, 28, 21, 54, 30, 836000)

import datetime

cars = MyClass.objects.filter(date__lt=datetime.datetime.now() - datetime.timedelta(days=1))

UPDATE Comment by Mikko Ohtamaa:

Also to avoid problems with timezones I recommend using timezone.now() instead of datetime.datetime.now() (available since Django 1.4)

import datetime
from django.utils import timezone

cars = MyClass.objects.filter(date__lt=timezone.now() - datetime.timedelta(days=1))
like image 163
falsetru Avatar answered Dec 02 '25 10:12

falsetru