2017-02-14 14 views
0
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 часов.Django Filter Object с created_at в течение последних 3 часов

+0

Я думаю, вам нужно поле 'models.DateTimeField', но не' models.DateField' –

+0

У меня их уже есть. Вот что такое 'created_at'. – dcolumbus

ответ

0

Просто использовать 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) 
+0

Я не уверен, как вы рекомендуете фильтровать последние 3 часа ... можете ли вы предоставить образец именно этого? – dcolumbus

+0

@dcolumbus Обновлено. Вы хотите использовать 'datetime.timedelta' для переключения на три часа. –

0

Это, как я хотел бы получить текущее время, а затем вычесть 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)) 

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

+0

У меня нет доступа к 'dateutil' – dcolumbus

 Смежные вопросы

  • Нет связанных вопросов^_^