我正在尝试为查询集过滤创建条件。
这意味着我的模型有2个字段,一个字段代表timedelta(分钟数),一个字段代表日期时间(start_datetime
),和datetime.datetime.now()
(又名now
)。
我想检查是否start_datetime - now <= time_delta
。
我已经看到了一个示例(来自doc),在该示例中,我们可以比较两个日期(时间)和一个恒定的时间增量。
>>> from datetime import timedelta
>>> Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))
但是如果它是我输入的其他字段中包含的值怎么办?
显然不允许我尝试实例化此时间增量的方法。
>>> from datetime import timedelta
>>> Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=F('n_timedelta')))
是否可以找到使用ORM功能实现此目标的解决方案? 我想尽量避免使用一些原始SQL。
答案 0 :(得分:1)
我想我找到了解决方法。
我在不同的转换和演员转换上苦苦挣扎,所以我尝试了另一种方式:
我将过滤条件应用于time_delta
属性,并使用两个日期之间的差值来提取自EPOCH时间以来的秒数,然后除以60得到分钟数:
哪个给了类似的东西:
>>> from django.db.models import F
>>> from django.db.models.functions import Extract, Now
>>> Entry.objects.filter(
... time_delta__gte=(Extract(F("start_datetime"), "epoch") - Extract(Now(), "epoch"))/60
... )