3

私は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 |
+------+-------+-------+-------+-------+
4

2 に答える 2

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>  
于 2012-05-21T14:03:30.590 に答える
1

pandasのようなものを使用することを検討しましたか? Python でピボット機能を提供する DataFrame オブジェクトを提供します。必要に応じて、ビューまたはモデルで使用できます。簡単な例については、この質問を見てみてください

于 2012-05-22T14:05:54.717 に答える