我如何在 django rest 框架中使用日期时间字段来过滤两次之间的数据

how can i filter data between two time i am using date time field for it in 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 项目使用的是哪个时区。 您可以从 settings.py 文件中的 TIME_ZONE 变量进行检查。 假设时区是 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安装它。 希望你能。