Как я могу фильтровать данные между двумя временами я использую для этого поле дата время в django rest framework
Я пытаюсь фильтровать данные с помощью поля дата-время, но в моем случае это не работает. Поэтому, пожалуйста, кто-нибудь подскажите мне, как я могу фильтровать дату по времени
start_time = 2022-05-13 02:19:19.146009
end_time = 2022-05-13 02:20:19.146009
parser_order_mi = ParserOrderMenuItem.objects.filter(menu_item_id=menu_item_id,created_at__range=[start_time,end_end_time])
Вы можете использовать подход __range(initial_time, end_time)
:
start_time = 2022-05-13 02:19:19.146009
end_time = 2022-05-13 02:20:19.146009
ParserOrderMenuItem.objects.filter(timestamp__range=(start_time, end_time))
Или вы также можете использовать __gte
, который относится к больше или равно, и __lte
, который относится к меньше или равно:
start_time = 2022-05-13 02:19:19.146009
end_time = 2022-05-13 02:20:19.146009
ParserOrderMenuItem.objects.filter(timestamp__gte=start_time,timestamp__lte=end_time)
Во-первых, вам нужно убедиться, какой часовой пояс использует ваш проект Django.
Вы можете проверить это по переменной TIME_ZONE
в файле settings.py.
Предположим, что часовой пояс UTC
.
from datetime import datetime
import pytz
# assume that start_time and end_time is at your local timezone
inf_time = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f")
sup_time = datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S.%f")
# convert into UTC timezone
inf_time.astimezone(pytz.timezone("UTC"))
sup_time.astimezone(pytz.timezone("UTC"))
ParseOrderMenuItem.objects.filter(created_at__gte = inf_time).filter(created_at__lte = sup_time)
Если вы еще не установили pytz
, то вы можете установить его с помощью команды pip install pytz
.
Надеюсь, это помогло вам.