通过ORM将日期添加到日期

时间:2015-06-15 06:32:31

标签: python django

如何在数据库中添加日期到日期?我的模特是:

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组合的方法。

2 个答案:

答案 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放在自定义管理器中以隔离数据库特定代码。