Django F表达式在datetime对象上(Django F expression on datetime objects)
PostgreSQL特定解决方案:
PostgreSQL Specific Solution:
我的模型是:
class Test(): date1 = models.DateTimeField() date2 = models.DateTimeField()我可以使用以下查询找出date2大于date1对象:
Test.obejcts.filter(date2__gt=F('date1'))我想找到所有的对象date2比date1一年。 如何根据date1和date2之间的差异找出对象?
My model is:
class Test(): date1 = models.DateTimeField() date2 = models.DateTimeField()I can find out objects who's date2 is greater than date1, using the following query:
Test.obejcts.filter(date2__gt=F('date1'))I would like to find all the objects who's date2 is greater than date1 by one year. How can I find out objects based on difference between date1 and date2?
最满意答案
一般解决方案
您可以annotate日期差异,然后根据timedelta(days=365) (非常接近@Anonymous在其评论中建议的内容):
Test.objects.annotate( duration=F('date2') - F('date1') ).filter(duration__gt=timedelta(days=365))PostgreSQL特定解决方案:
如果您使用的是PostgreSQL ,则可以从此答案中获得另一个选项:
from django.db.models import F, Func Test.objects.annotate( duration = Func(F('date2'), F('date1'), function='age') ).filter(duration__gt=timedelta(days=365))General Solution:
You can annotate the date difference and then check this against the timedelta(days=365) (pretty close to what @Anonymous suggests in his comment):
Test.objects.annotate( duration=F('date2') - F('date1') ).filter(duration__gt=timedelta(days=365))PostgreSQL Specific Solution:
If you are using PostgreSQL, there is another option derived from 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))更多推荐
发布评论