簡単な掛け算割り算で出るような値は、いちいちDBに結果を保持するのは冗長です。
views.pyで計算してレンダリングしても良いですが、テンプレートでサクッとやれちゃえば楽です。
しかし、DurationフィールドはTimeフィールドやDatetimeフィールドと違い、データ型が実際は浮動小数点型なので、日付け操作用の組み込みフィルタで小数点以下切り捨てなどがきません。
それになぜか、{{ value|flortformat:0 }} も効きません。
仕方が無いのでフィルタを自作します。
フィルタ自作の方法自体は、こちらが詳しいです。
ここでは、上記サイトの中の「utils.py」の内容だけ説明します。(別に名前は何でもよいです)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from django import template register = template.Library() """ 自作テンプレートフィルタ """ # durationフィールドの割り算用 (1秒未満切り捨て) @register.filter(name="division_duration") def division_duration(value, args): ret = value / args total_time = ret.total_seconds() hours = int(total_time / 3600) # 時間 minutes = int(total_time % 3600 / 60) # 分 seconds = int(total_time % 3600 % 60) # 秒 return '{:02}:{:02}:{:02}'.format(hours, minutes, seconds) |
テンプレートで以下のように書けば、Durationフィールドの割り算と丸めが、できるようになります。
1 2 3 4 5 |
{% load utils %} 作業時間は、1ダースあたり {{ duration_value|division_duration:12 }} です。 |
参考サイト)