gpt4 book ai didi

python - 新版本的 Django 中 DateModifierNode 的替代品是什么

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:46 25 4
gpt4 key购买 nike

我想基于模型的两个字段进行查询,一个日期,由一个 int 偏移,用作 timedelta

model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval')))

是不行的,因为不能将 F() 表达式传递到 timedelta

稍微挖掘一下,我发现了 DateModifierNode - 尽管它似乎已在此提交中删除:https://github.com/django/django/commit/cbb5cdd155668ba771cad6b975676d3b20fed37b (来自这个现已过时的 SO 问题 Django: Using F arguments in datetime.timedelta inside a query )

提交提到:

The .dates() queries were implemented by using custom Query, QuerySet, and Compiler classes. Instead implement them by using expressions and database converters APIs.

这听起来很明智,而且应该仍然有一个简单快捷的方法 - 但我一直在寻找如何做到这一点但毫无结果 - 有人知道答案吗?

最佳答案

在 Django 1.10 中,有更简单的方法可以做到这一点,但您需要稍微更改一下模型:使用 DurationField。我的模型如下:

class MyModel(models.Model):

timeout = models.DurationField(default=86400 * 7) # default: week
last = models.DateTimeField(auto_now_add=True)

查找 last 之前 now 减去 timeout 的对象的查询是:

MyModel.objects.filter(last__lt=datetime.datetime.now()-F('timeout'))

关于python - 新版本的 Django 中 DateModifierNode 的替代品是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703016/

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