Объект фильтра Django с созданным_атлом за последние 3 часа

start_date = datetime.date(2017, 1, 1)
end_date = datetime.date(2017, 2, 28)

camera_logs = CameraLog.objects.filter(camera_id=camera_id, created_at__range=(start_date, end_date))

Я вижу, как фильтровать по дням, но как я могу фильтровать по определенным часам? Мне нужно отфильтровать 3, 6, 12, 24 ч.

2 ответа

Просто используйте datetime.datetime:

start_date = datetime.datetime(2017, 1, 1, 0) # hour 0
end_date = datetime.datetime(2017, 1, 1, 3) # hour 3

Это отфильтровывает значения где created_at между полуночью и 3 утра.


Для фильтрации по последним трем часам:

# current date with minutes, seconds, and microseconds set to 0
end_date = datetime.datetime.today().replace(minute=0, second=0, microsecond=0)
# shift that date by 3 hours to get the start of the range
start_date = end_date - datetime.timedelta(hours=3)

Вот как я мог бы получить текущее время, а затем вычесть 3 часа для диапазона:

from django.utils import timezone
from dateutil.relativedelta import relativedelta
import datetime
import pytz


end_date = timezone.localtime(timezone.now()).replace(tzinfo=pytz.timezone('America/Guatemala')) 
start_date = end_date + relativedelta(hours=-3)
camera_logs = CameraLog.objects.filter(camera_id=camera_id, created_at__range=(start_date, end_date))

Просто замените "Америка / Гватемала" своим часовым поясом.

Другие вопросы по тегам