在django模板中旋转(行/列转置)

时间:2012-05-21 13:26:18

标签: python django templates orm pivot

我需要在django模板中进行旋转(行列转置),我很确定ORM无法处理它。是否有像regroup这样的内置模板标签,它可以处理枢轴。

以下是我需要的东西?

select * from exams;

 +------+------+------+-------+
| pkey | name | exam | score |
+------+------+------+-------+
|    1 | Bob  |    1 |    75 |
|    2 | Bob  |    2 |    77 |
|    3 | Bob  |    3 |    78 |
|    4 | Bob  |    4 |    80 |
|    5 | Sue  |    1 |    90 |
|    6 | Sue  |    2 |    97 |
|    7 | Sue  |    3 |    98 |
|    8 | Sue  |    4 |    99 |
+------+------+------+-------+

列出如下

+------+-------+-------+-------+-------+
| name | exam1 | exam2 | exam3 | exam4 |
+------+-------+-------+-------+-------+
| Bob  |    75 |    77 |    78 |    80 |
| Sue  |    90 |    97 |    98 |    99 |
+------+-------+-------+-------+-------+

2 个答案:

答案 0 :(得分:3)

这个怎么样?

在views.py中......

exams = Exam.objects.all() 
transposed = {}

for exam in exams:
    transposed.setdefault(exam['name'], {}).update(
                        {'exam%s' % exam['exam']: exam['score']})

在你的模板中......

<table>
  <tr><th>name</th>   ...   </tr>
  {% for name, scores in transposed.items %}
    <tr><td>name</td><td>scores.exam1</td><td>scores.exam2</td>
        <td>scores.exam3</td><td>scores.exam4</td></tr>
  {% endfor %}
</table>  

答案 1 :(得分:1)

您是否考虑使用pandas之类的内容?它提供了一个DataFrame对象,可以在python中为您提供透视功能。根据您的需要,您可以使用它查看或在模型中使用它。 有关快速示例,请尝试查看this question