编程语言
首页 > 编程语言> > 在新版本的Django中,DateModifierNode的替代品是什么?

在新版本的Django中,DateModifierNode的替代品是什么?

作者:互联网

我想基于模型的两个字段进行查询,日期,偏移量为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)

并查找查找最后一个现在减去超时的对象的查询是:

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

标签:python,django,django-orm,django-models,orm
来源: https://codeday.me/bug/20191001/1839640.html