如何在数据库中添加日期到日期?我的模特是:
class Item(models.Model):
days_due = models.IntegerField()
issue_date = models.DateTimeField()
我有一个类似的功能:
def is_due(self):
time = self.days_due
days = timedelta(days=time)
due_date = self.issue_date + days
if timezone.now() >= due_date:
return True
else:
return False
我希望能够通过数据库查询执行类似于上面is_due
函数的操作,如何做到这一点?
我已经参考了文档,但看不到将F
类与timedelta
组合的方法。
答案 0 :(得分:0)
不幸的是,你不能用F表达式做到这一点:https://code.djangoproject.com/ticket/16487
您可以使用 .raw()方法编写自定义SQL查询,也可以使用标准过滤器来实现此功能,但前提是所有模型都具有相同的days_due值,这可能不是这种情况 - 但为了以防万一,你可以这样做:
Item.objects.filter(issue_date__lte=now - datetime.timedelta(days=days))
答案 1 :(得分:0)
我认为你不能以db不可知的方式做到这一点。我会使用extra(select)
在您的查询中添加is_due
字段。像(未经测试)的东西:
Item.objects.extra(select={'is_due': 'issue_date + days_due'})
可以在 postgres 数据库上运行。将extra select
放在自定义管理器中以隔离数据库特定代码。