python - Django - 如何显示数据矩阵,在每一行和每一列的末尾都有总和

标签 python django matrix

好的 - 所以我实际上想要展示的是一家使用基金会计的公司的综合 Assets 负债表。

但为了简单起见,我将使用一个类比。

假设一群人要去公路旅行。领队对每个人说,“给我一张 list ,列出你要我为这次旅行购买的所有杂货”。所有想去的人都把名单递给他。根据该列表,领导者汇总了一个主列表,从中可以去杂货店购物。

主要有两个未知数:

  1. 有多少人要去旅行,从而提供一个列表
  2. 每份 list 上的元素(和数量)

例如,假设有两个人正在提供列表,他们可能看起来像这样:

A :

  • 4个苹果
  • 6个香蕉
  • 1 盒 cookies

B:

  • 2个香蕉
  • 4个橙子
  • 1个西瓜

从这两个列表中,领导者必须生成如下列表:

      Person      A  B  Total
                ------------
Apples            4  0   4
Bananas           6  2   8
Oranges           0  4   4
Watermelon        0  1   1
----------------------------
    **Fruit**    10  7  17

Box of Crackers   1  0   1
----------------------------
    **Other**     1  0   1

您可以看到最终列表是一个矩阵,其中包含每个项目(行)的总计,然后再次对每个主要类别(水果/其他)进行总计。有了两个未知数(人/元素),这个矩阵可以有任意数量的人(列)和任意数量的元素(行)。此外,该列表被分为“水果”和“其他”,以及这些组中的总数。

我需要弄清楚如何显示此类数据(但用于会计)。我试过使用列表,我将 A 的所有项目放入一个列表,将 B 的所有项目放入另一个列表,然后遍历我的 Django 模板上的列表,但这并不是那么好用。

我可以想象有多种方法可以解决这个问题,我只是不确定最有效的方法是知道每个主列表可能有很多“人”和很多“项目”。

同样,这实际上是为了显示使用基金会计的公司的合并 Assets 负债表。因此,“人”实际上是基金,“杂货项目”实际上是每个基金内的账户。并非每个基金都拥有与其他基金相同的账户。

编辑

为了清楚起见,我是这样建模的:

model Person
  field: persons_name

model ItemType:
  field: i_types #Things like "Fruit", "Veggies", "Canned Goods", etc.

model Item
  field: item_name
  FK: ItemType


model Selection
  FK: Person
  FK: Item
  field: qty

编辑 2 为我的模型添加了更多字段

最佳答案

除了在模板中展示之外,您应该避免做任何其他事情。我的建议是在 View 中构建一些方便的数据结构,然后在模板中迭代它们:

  • “人员”的列表(用于创建表头)
  • 项目的字典,其中项目是键(您可以使用项目的字符串表示来简化事情),值是项目的有序列表,其顺序与上一点的列表是有序的;您也可以将总数附加到此列表中。

这使得使用模板中的东西更容易,你会有这样的东西:

<table>
    <thead>
        <tr>
            <td>Item name</td>
            {% for person in person_list %}
                <td>{{ person.name }}</td>
            {% endfor %}
            <td>Total</td>
        </tr>
    </thead>
    <tbody>
        {% for item, item_list in item_dict.items %}
            <tr>
                <td>{{ item }}</td>
                {% for i in item_list %}
                    <td>{{ i }}</td>
                {% endfor %}
            </tr>
        {% endfor %}
    <tbody>
</table>

为了整合您的类别,dictionary 结构可以进一步嵌套在包含数据(上面的字典)和总计列表的类别dictionary 中。

我建议的底线是,您应该在 View 中构建所有结构,以便在模板中轻松显示它们,而不是相反

关于python - Django - 如何显示数据矩阵,在每一行和每一列的末尾都有总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483927/

相关文章:

python - 如何在 MultiIndex Groupby 中高效执行乘法

django - 有没有一种简单的方法可以将 Django 的模型和迁移链与数据库验证一致性进行比较?

python - 如何在 Django 中创建复杂的 Left JOIN

python - 获取父表及其子表的正确方法

python - 在 Python 中计算 30 秒周期内的信号能量

python - numpy 求解线性方程组和矩阵的区别

无法在 ANSI C 中声明具有大行/列 (1446) 的方阵

performance - 如何进行快速的多维矩阵向量乘法?

python - 根据范围替换numpy数组中的重复元素

python - 无法找出 Heroku 应用程序失败的位置 [错误 : pg_config executable not found.]