python - 日期时间对象上的 Django F 表达式

标签 python django python-2.7 django-queryset

我的模型是:

class Test():
   date1 = models.DateTimeField()
   date2 = models.DateTimeField()

我可以使用以下查询找出 date2 大于 date1 的对象:

Test.objects.filter(date2__gt=F('date1'))

我想找出date2date1 大一年的所有对象。
如何根据 date1date2 之间的差异找出对象?

最佳答案

一般解决方案:

您可以注释日期差异,然后对照timedelta(days=365) 进行检查(与@Anonymous 在他的评论中建议的非常接近):

Test.objects.annotate(
    duration=F('date2') - F('date1')
).filter(duration__gt=timedelta(days=365))


PostgreSQL 特定解决方案:

如果您使用的是 PostgreSQL,则还有一个派生自 this answer 的选项:

from django.db.models import F, Func

Test.objects.annotate(
    duration = Func(F('date2'), F('date1'), function='age')
).filter(duration__gt=timedelta(days=365))

关于python - 日期时间对象上的 Django F 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890131/

相关文章:

django - 在 Django 中哪里可以编写纯 python 代码?

python - 无法在 Ubuntu 14.04 上升级 pip 1.5.4 - InsecurePlatformWarning : A true SSLContext object is not available

Python:如何将用户输入添加到列表中?

python - 在 Python/Django 中递归收集 child

python - Django:生成报告

python - Pandas 在groupby中表示跨行和列

python - 将 json 数据转换为数据框

python - 为什么 python 'in' 运算符根据元组大小表现不同?

python - 使用 iGraph 的最快可能传染算法

python - 当客户端不干净地退出时,如何检测服务器上 Python aiohttp web 套接字的关闭