python - 使用 Django,我如何在单个查询中实现此目的?

标签 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_at 之间的所有记录>active_at + 持续时间

我使用的是 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

关于python - 使用 Django,我如何在单个查询中实现此目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055700/

相关文章:

python - 在 Mac OS X 上使用 bjam (Boost.Build) 构建 Python 扩展

arguments - 选择 2-3 个选项作为函数参数的 Pythonic 方式

python - 创建旋转表面

python - 属性错误 : 'module' object has no attribute 'urls'

python - Django 通过字段选择对字段中的唯一项目进行计数并按父字段进行分组

django - 如何在 Django 查询中动态提供查找字段名称?

python - Google App Engine 将 static_dir 映射到远程 url

django - 如何将类属性添加到 Django 身份验证登录表单?

python - 在 Django 中使用 Python ZipStream 获取损坏的 zip

python - 如何让django QuerySet会动态过滤?