【问题标题】:Using Django, how I can achieve this in a single query?使用 Django,我如何在单个查询中实现这一点?
【发布时间】:2015-05-17 07:41:18
【问题描述】:

我有以下型号:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多