2015-02-06 44 views
2

我在查詢集中有很多行。許多行在兩個字段中共享相同的值。Rowspan和在Django模板中分組

我想在一個表中顯示整個查詢集,但我不想打印那些多次相同的值。

我的輸出會是這樣的

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 %} 

,但我不知道如何來完成同樣的當兩個情緒和年齡應該「補多行」。我猜想必須有一些好的方法,因爲我已經看到其他網站在很多領域都採用相同的方法(例如在商業智能工具中)。

回答

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 %} 

我希望它有助於(它的工作對我類似的問題)。