我正在尝试创建一个完整的查询集,现在我只需要从模型中获取两个DateTime
字段之间的月份,就可以在单个查询集中执行此操作。
我不是在谈论过滤器,因为在模型中我有两个datetimeField()
,现在我想要做的是,在这些日期之间得到几个月。
答案 0 :(得分:3)
如果您的数据库支持DurationField
,则可以使用ExtractMonth:
from django.db import models
from django.db.models.functions import ExtractMonth
queryset = MyModel.objects.annotate(
diff=models.ExpressionWrapper(
models.F('date1') - models.F('date2'), output_field=models.DurationField())
).annotate(months=ExtractMonth('diff'))
答案 1 :(得分:0)
在postgres上给出的答案对我不起作用,因为diff
字段(DurationField)仅支持Extract
天的功能。 ExtractMonth
返回“ 0”。
这是我找到的解决方案:
queryset = MyModel.objects.annotate(
months=(ExtractYear("date2") - ExtractYear("date1")) * 12 + (ExtractMonth("date2") - ExtractMonth("date1"))
)
请注意,它仅考虑每个月的第一天之间的差异,而不考虑各天的最终分数。在此解决方案中,2020-08-12被视为与2020-08-01相同。