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

Using Django, how I can achieve this in a single query?

我有以下型号:

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

给定 now = datetime.now(),我想检索 nowactive_atactive_at + duration 之间的所有记录。

我正在使用 Django 1.8。这是 DurationField docs.

如文档中所述,带有 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