我想弄清楚如何计算数据库中一年中的总期间数。例如,计算一年中的总叶子数。
我正在使用:
Django - 1.11.7
Postgres - 9.4
这是我的模型.py:
class Leave(models.Model):
leavedatefrom = models.DateField()
leavedateto = models.DateField()
一个例子来说明这个问题:
leaves taken in 1 year (01/01/2019 - 31/12/2019)
record 1: (leavedatefrom)01/02/2019 - (leavedateto)05/02/2019 ===> 5 days
record 2: (leavedatefrom)10/05/2019 - (leavedateto)12/05/2019 ===> 3 days
Total days = 5 + 3 = 8 days
如何在 Django 中计算一年中数据库中的周期天数?基本上我想在上面的例子中得到 8 天。
最佳答案
我想我有点晚了。您可以在单个 SQL 查询中获得天数总和
from django.db.models import F, IntegerField, ExpressionWrapper, Sum
Leave.objects.filter(...).annotate(
diff_date_in_integer=ExpressionWrapper(F('leavedateto') - F('leavedatefrom'), output_field=IntegerField())
).annotate(
diff_date_in_days=ExpressionWrapper(F('diff_date_in_integer') / (1000000 * 60 * 60 * 24), output_field=IntegerField())).aggregate(
sum=Sum('diff_date_in_days'))
在 filter(...)
子句,可以加上datetime
等过滤条件或者 user specific data
描述
- 注释
leavedateto
之间的区别 和leavedatefrom
“整数” 格式(在diff_date_in_integer
带注释的字段中) - 转换了
diff_date_in_integer
数据到days
- 使用
aggregate()
功能和Sum()
DB函数,我们发现了总天数。
关于python - 使用 Django (queryset) - postgres 计算一年中期间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231534/