python - 如何在查询集中使用 Django __time 查找

标签 python django django-queryset

我有一个包含 2 个日期时间字段的模型,如下所示:

class Booking(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    ...

作为测试数据,我在同一天(2018 年 5 月 8 日)有 2 个开始日期在 17:30 之前的预订和 2 个在 17:45 之后的预订。我正在尝试使用 __time 查找来过滤预订,以查找 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())

查询集返回所有预订(它应该只返回 start_date 在 17:30 之后的 2 个预订)。有人可以向我解释一下 __time 查找是如何使用的吗?

编辑 我将过滤器更新为

bookings = Booking.objects.filter(start_date__time__lte=datetime.time())

结果是一样的。当我打印预订的值(value)时,这些值(value)是:

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

最佳答案

我认为您应该比较完整的日期时间对象,而不是只比较时间部分。 调试查询返回时间的“类型”以及您提供给它进行比较的时间类型。两者应该相同。 Django shell 可以提供很大的帮助。

关于python - 如何在查询集中使用 Django __time 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492098/

相关文章:

python - 在 Django query set order by 子句中使用绝对函数

从安全角度看 Python 与 NodeJS Web 应用程序

Django 1.8 在引用 django_content_type 之前创建表然后失败

python-3.x - 合并或联合动态创建的查询集列表 - Django

python 调整 Qpainter 的大小

python - nn.Linear 的输出对于相同的输入是不同的

python - 如何通过python正则表达式排除某些字符来提取

django - Django 的 ORM 可以返回嵌套对象查询集吗?

python - 使用mptt查询项目中的困难条件

Django QuerySet values() 包括 ForeignKey 字段