在新版本的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