我在查询集中有很多行。许多行在两个字段中共享相同的值。
我想在表格中显示整个查询集,但我不想打印多次相同的值。
我的输出类似于
mood, age, id
=============
glad, 31, 1
, , 2
, , 3
, 32, 4
, , 5
sad, 31, 6
, , 7
, 34, 8
, , 9
, , 10
happy, 40, 11
我希望这是有道理的。当多行共享相同的值时,我不想再次打印它们。我正在使用rowspan属性使行填充共享相同值的行数。
我知道如何只使用一个字段:
{% regroup my_queryset by mood as mood_list %}
{% for mood in mood_list %}
{% for node in mood.list %}
<tr>
{% if forloop.first %}
<td rowspan="{{ mood.list|length }}">{{ mood.grouper }}</td>
{% endif %}
<td>{{ node.id }}</td>
</tr>
{% endfor %}
{% endfor %}
但我不知道如何在心情和年龄“填充多行”时完成相同的操作。我想必须有一些好方法,因为我看到其他网站在许多领域都做同样的事情(例如商业智能工具)。
答案 0 :(得分:1)
使用here中的示例和here中的parentloop提示,我创建了以下代码:
{% if my_queryset %}
{% regroup my_queryset by mood as data_by_mood %}
<table border="1">
<thead>
<caption>Data</caption>
<tr><th>mood</th><th>age</th><th>id</th></tr>
</thead>
<tbody>
{% for data0 in data_by_mood %}
{% regroup data0.list by age as data0_by_age %}
{% for data1 in data0_by_age %}
{% for data in data1.list %}
<tr>
{% if forloop.first %}
{% if forloop.parentloop.first %}
<td rowspan="{{ data0.list|length }}">{{ data0.grouper }}</td>
{% endif %}
<td rowspan="{{ data1.list|length }}">{{ data1.grouper }}</td>
{% endif %}
<td>{{ data.id }}</td>
</tr>
{% endfor %}
{% endfor %}
{% endfor %}
</tbody>
</table>
{% endif %}
我希望它有所帮助(它对我来说也是一个类似的问题)。