将日期时间与其他字段中的时间增量进行比较(F()对象)

上下文:

我正在尝试为查询集过滤创建条件。

这意味着我的模型有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。

seritwitch 回答:将日期时间与其他字段中的时间增量进行比较(F()对象)

我想我找到了解决方法。

我在不同的转换和演员转换上苦苦挣扎,所以我尝试了另一种方式:

我将过滤条件应用于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
... )
本文链接:https://www.f2er.com/3152627.html

大家都在问