Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django新版本中DateModifierNode的替代品是什么_Python_Django_Django Models_Orm_Django Orm - Fatal编程技术网

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

Python Django新版本中DateModifierNode的替代品是什么,python,django,django-models,orm,django-orm,Python,Django,Django Models,Orm,Django Orm,我想基于模型的两个字段进行查询,一个日期,一个int偏移量,用作timedelta model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval'))) 是不允许的,因为F()表达式不能传递到timedelta中 model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval'))) 稍微挖掘一下,我发现了D

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

model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval')))
是不允许的,因为F()表达式不能传递到timedelta中

model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval')))
稍微挖掘一下,我发现了
DateModifierNode
——尽管它似乎在这次提交中被删除了:(从这个现在已经过时的问题)

委员会提到:

.dates()查询是通过使用自定义查询QuerySet实现的, 和编译器类。而是通过使用表达式和 数据库转换器API


这听起来很合理,似乎还有一个简单快捷的方法——但我一直在徒劳地寻找如何做到这一点——有人知道答案吗?

啊,从文档中回答:

这应该使我的原始查询看起来像

model.objects.annotate(new_date=ExpressionWrapper(F('last_date') + F('interval'), output_field=DateTimeField())).filter(new_date__gte=datetime.now())

在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'))

未对此进行测试-但假设您进行了测试;)看起来是一个更好的解决方案!将django升级到
F('last_date')+F('interval')
,并且输出为datetimefield,这将非常可能吗?它以天为单位增加,与时间增量(天=间隔)相同。从日期中减去一个数字对我不起作用,因为它不被认为是天数的减法。我使用的是mysql,你不需要改变模型结构,也不需要手动添加。参考