python - 如何在查询集中使用 Django __time 查找
问题描述
我有一个带有 2 个日期时间字段的模型,如下所示:
class Booking(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
...
作为测试数据,我有 2 个 start_date 在 17:30 之前的预订和 2 个在 17:45 之后的预订,都在同一天(2018 年 5 月 8 日)。我正在尝试使用 __time 查找过滤预订,以查找 17:30 之前(包括)17:30 之前的所有预订。我的查询集是:
bookings = Booking.objects.filter(date__time__lte=datetime.time())
datetime.time 打印为
datetime.time(17, 30)
并且日期时间的日期部分与预订日期相同。上面的查询返回一个空的查询集,但是如果我使用相同的查询,除了过滤大于 datetime.time() 的时间,即
bookings = Booking.objects.filter(date__time__gte=datetime.time())
查询集返回所有预订(它应该只返回 17:30 之后 start_date 的 2 个预订)。有人可以向我解释一下 __time 查找是如何使用的吗?
编辑 我将过滤器更新为
bookings = Booking.objects.filter(start_date__time__lte=datetime.time())
结果是一样的。当我打印预订的值时,这些值为:
print Booking.objects.all().values('date', 'end_date')
[
{'start_date': datetime.datetime(2018, 5, 8, 16, 30, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 17, 0, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 0, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 17, 30, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 45, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 18, 15, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 45, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 18, 15, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)}
]
编辑 2 我忘了提到我需要获得同一日期的预订。正如 siddhant0905 建议的那样,我改为使用日期时间过滤查询集,并添加了一个额外的过滤器以确保它在同一日期。以下对我有用:
bookings = Booking.objects.filter(Q(start_date__date=datetime.date()) & Q(start_date__lte=datetime))
解决方案
我认为您应该比较完整的 datetime 对象,而不仅仅是比较时间部分。调试查询返回的时间的“类型”以及您提供它进行比较的时间类型。两者应该是一样的。Django shell 可以提供很大帮助。
推荐阅读
- angular - 如何定义用于导出 csv 的特定标头?
- javascript - 当我输入输入时显示离子芯片
- vba - 在文件夹 VBA 中的所有 .xlsx 文件中查找和替换字符串中的字符
- sql - 在 SQL 中使用官方 IANA 时区数据库时需要帮助
- oracle - 兼容 Oracle 19c - Powerbuilder
- flutter - 在我实施了 Getx 状态管理后,“在 null 上调用了 getter 'visible'。”
- r - 下载文件直到它工作
- javascript - 正则表达式查找文件中的合并冲突
- apache-kafka - 有没有办法将chrome历史日志发送到kafka?
- java - Jbpm 7.39 故障