使用Django,我如何在单个查询中实现这一点?

时间:2015-03-14 23:57:28

标签: python django django-queryset timedelta django-aggregation

我有以下型号:

class Ticket(models.Model):
    # ... other fields omitted
    active_at = models.DateTimeField()
    duration = models.DurationField()

鉴于now = datetime.now(),我想要检索now介于active_atactive_at + duration之间的所有记录。

我正在使用Django 1.8。以下是DurationField docs

1 个答案:

答案 0 :(得分:3)

如文档中所述,使用DurationField的算法在PostgreSQL以外的数据库中并不总是按预期工作。我不知道它在哪个范围内工作或在其他数据库中不起作用,因此您必须自己尝试。

如果可行,您可以使用以下查询:

from django.db.models import F

active_tickets = Ticket.objects.filter(active_at__lte=now, 
                                       active_at__gt=now-F('duration'))

F对象引用数据库中的字段,在这种情况下为duration