我的模型是:

class Test():
   date1 = models.DateTimeField()
   date2 = models.DateTimeField()
我可以使用以下查询找出date2大于date1的对象:
Test.obejcts.filter(date2__gt=F('date1'))
我想找到date2date1大一年的所有对象。
如何根据date1date2之间的差异找出对象?

最佳答案

一般解决方案:

您可以annotate日期差异,然后对照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/

10-12 14:20