'how can i filter data between two time i am using date time field for it in django rest framework

I am trying to filter my data with a date-time field, but in my case its not working. So please someone suggest to me how can I filter my date with time

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])


Solution 1:[1]

First, you need make sure which timezone your Django project is using. You can check this from TIME_ZONE variable in settings.py file. Let's say the timezone is 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)

If you haven't installed pytz yet, then you can install it using the command pip install pytz. Hope it could you.

Solution 2:[2]

You can use the __range(initial_time, end_time) approach:

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))

Or you can also use __gte that refers greater than or equal to and __lte that refers less than or equal to:

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)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 David Lu
Solution 2 Elias Prado