gpt4 book ai didi

当前时间介于两个 TimeField 值之间时的 Django 过滤器

转载 作者:行者123 更新时间:2023-12-04 12:18:48 25 4
gpt4 key购买 nike

我在我的数据库中存储一个对象,其时间字段如下所示:

class MyClass(models.Model):

start_time = models.TimeField(null=True, blank=True)
stop_time = models.TimeField(null=True, blank=True)

这里的想法是,当查询端点时,服务器将只返回当前时间在 start_time 和 stop_time 之间的对象。

注意:start_time 和 stop_time 是一天中的任意时间,可以跨越午夜,但不会超过 24 小时。

我试过了
currentTime = datetime.now().time()
MyClass.objects.filter(stop_time__gte=currentTime, start_time__lte=currentTime)

但这并没有说明时间跨过午夜的时间。

我确信必须有一个简单的解决方案,但网络搜索让我毫无结果。有谁知道这样做的好方法吗?

最佳答案

经过更多的挖掘,我发现这需要两个查询:一个是开始时间小于停止时间(常见情况),一个是大于停止时间(不常见的,午夜后的情况) )。

这是代码:

currentTime = datetime.now().time()

#Returns a list of menus that have start times less than their stop times
list_1 = MyClass.objects.filter(Q(start_time__lte=F('stop_time')), Q(start_time__lte=currentTime), stop_time__gte=currentTime)

#Returns the menus that have start times greater than their stop times (span midnight)
list_2 = MyClass.objects.filter(Q(start_time__gt=F('stop_time')), Q(start_time__lte=currentTime) | Q(stop_time__gte=currentTime))

concat_list = list_1 | list_2
concat_list = concat_list.order_by('-priority')

由于我们使用“|”为了连接列表,我们可以保留与原始列表相同的特征,例如“order_by()”。仅当连接的数据来自同一模型集时才会出现这种情况。

引用:

Django After Midnight Business Hours TimeField Comparison Error

How to combine 2 or more querysets in a Django view?

关于当前时间介于两个 TimeField 值之间时的 Django 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com