繁体   English   中英

如何过滤出今天日期在计算日期范围内的对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM