A common need in reports is to provide totals. This can be done using Python expressions to compute those totals.
After the closing tag of the <t t-foreach>
,we will add a final row with the totals:
<!-- Totals --> <div class="row"> <div class="col-xs-3"> Count: <t t-esc="len(docs)" /> </div> <div class="col-xs-2" /> <div class="col-xs-1"> Total: <t t-esc="sum([o.amount_cost for o in docs])" /> </div> <div class="col-xs-3" /> <div class="col-xs-3" /> </div>
The len()
Python statement is used to count the number of elements in a collection. Totals can be computed using sum()
value over a list of values. In the example preceding, we use a list comprehension to produce a list of values out of the docs
recordset. You can think of list comprehensions like an embedded for
loop.
Sometimes we want to perform some computations as we go along with the report. For example, a running total, with the total up to the current record. This can be implemented with t-set
to define an accumulating variable, and then update it on each row.
To illustrate this, we can compute the accumulated number of followers. We should start by initializing the variable, just before the t-foreach
loop on the docs
recordset, using:
<t t-set="follower_count" t-value="0" />
And then, inside the loop, add the record's number of followers to the variable. We will choose to do this right after presenting the list of followers, and will also print out the current total on every line:
<!-- Running total--> <t t-set="follower_count" t-value="follower_count + len(o.message_follower_ids)" /> Accumulated # <t t-esc="follower_count" />