Объект фильтра 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))
Просто замените "Америка / Гватемала" своим часовым поясом.