[英]How can I filter out objects where todays date falls within a range of a calculated date?
这是我目前拥有的代码。
models = Model.objects.annotate(
start_range=ExpressionWrapper(
F('a_date_on_the_model') + datetime.timedelta(days=-7),
output_field=DateField(),
),
end_range=ExpressionWrapper(
F('a_date_on_the_model') + datetime.timedelta(days=-2),
output_field=DateField(),
)
).filter(
F('today')__range=[F('start_range'), F('end_range')]
)
显然我不能在F('today')
上做一个范围,因为它不是数据库列/关键字,但我只是表明我有一个名为 today 的变量,我试图与之进行比较。 我觉得我已经很接近了,但可以使用一些帮助来解决这个问题。 注意: -7
和-2
将是动态日期,但例如只是硬编码。 这些数字和天数可以是正数或负数,但第一个数字当然总是大于第二个数字。
编辑 - 这就是 PSQL 的样子:
SELECT
*
FROM
my_table
WHERE
CURRENT_DATE BETWEEN (a_date_on_the_model + INTERVAL '-7 day') AND (a_date_on_the_model + INTERVAL '-1 day');
这有点棘手,但我认为您不需要为此使用注释。 我不确定我用于日期时间的运算符是否与您想要的完全匹配,但是如果您对此进行调整,我认为您将获得所需的查询集。
# Get models where the date is less than 7 days old, but more than 2
# days old.
models = Model.objects.exclude(
a_date_on_the_model__range=(
today - timedelta(days=7),
today - timedelta(days=2),
)
)
我今天可以注释。
today=Value(datetime.datetime.now().date(), output_field=DateField())
然后我可以这样做:
today__range=[F('start_range'), F('end_range')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.