Как я могу фильтровать данные между двумя временами я использую для этого поле дата время в 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. Надеюсь, это помогло вам.

Вернуться на верх