使用Django中的内联摘要生成列表/报告

Bar*_*tek 6 python django list report

我正在尝试编写一个视图,该视图将生成一个报告,该报告显示我的库存系统中的所有项目,并在某个点提供摘要.顺便提一下,这份报告纯粹只是一个HTML模板.

就我而言,每个项目都是订单的一部分.订单可以有多个项目,我希望能够在每个订单结束后显示基于SUM的摘要.

所以报告看起来像这样:

Order #25        <Qty> <Qty Sold> <Cost> <Cost Value>
Some Item          2       1       29.99    29.99
Another Item       4       0       10.00    40.00
<Subtotal Line>    6       1       39.99    69.99
Order #26        <Qty> <Qty Sold> <Cost> <Cost Value>
... Etc, you get the point
Run Code Online (Sandbox Code Playgroud)

现在,我完全有能力显示所有值,并且已经有一个显示所有项目的报告,但我不知道如何在不执行大量查询的情况下将Subtotals放在报表中.Quantity,Qty Sold和Cost字段只是Item模型的一部分,Cost Value只是一个简单的模型函数.

任何帮助,将不胜感激.提前致谢 :-)

S.L*_*ott 3

小计就是SELECT SUM(qty) GROUP BY order_number事情。

它们与获取详细信息的查询完全分开。

两个查询的结果需要交错。一个好方法是将每个订单创建为一个元组( list_of_details, appropriate summary )

然后显示就简单了

{% for order in orderList %}
    {% for line in order.0 %}
        {{ line }}
    {% endfor %}
    {{ order.1 }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

困难的部分是交错两个查询。

details = Line.objects.all()
ddict = defaultdict( list )
for d in details:
    ddict[d.order_number].append(d)

interleaved= []
subtotals = ... Django query to get subtotals ... 
for s in subtotals:
    interleaved.append( ( ddict[s.order], s.totals ) )
Run Code Online (Sandbox Code Playgroud)

interleaved对象可以提供给您的模板进行渲染。