На языке шаблонов django как посчитать количество предметов одного типа - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать таблицу, в которой перечислены элементы, которые можно классифицировать по типу. Я могу перечислить все элементы и их типы, которые возвращаются из моей базы данных в таблице без проблем. Это на самом деле то, что я хотел бы сделать. Поскольку эти элементы могут быть классифицированы по типу, я не вижу причин перечислять один и тот же тип несколько раз. Таблица упорядочена по типу категории, поэтому все элементы одного типа уже сгруппированы. По сути, у меня есть что-то вроде:

/ ________________ /
/ | item A | категория A | /
/ | пункт B | категория A | /
/ | item C | категория A | /
/ | пункт D | категория B | /
/ | пункт E | категория B | /
/ | пункт F | категория B | /
/ ------------------------ /
то, что я на самом деле хотел бы увидеть, это

/ ________________ /
/ | item A | `` `` `` `` `` `` `` `| /
/ | item B | категория A | /
/ | item C | _________ | /
/ | item D | `` `` `` `` `` `` `` | `
/ | item E | категория B | /
/ | пункт F | _________ | /
/ ------------------------- /

Это можно сделать достаточно легко с помощью ряда строк в html. Моя проблема с количеством строк в 'rowspan' неизвестна. В шаблоне Django у меня есть:

                <table class="table table-sm">
                    <thead>
                        <tr>
                            <td scope="col">Col 1</td>
                            <td scope="col">Col 2</td>
                        </tr>
                    </thead>
                    <tbody>
                        {% for option in options %}
                            <tr>
                                <td>{{ option.itemNumber }}</td>
                                {% ifchanged option.itemType %}
                                    <td rowspan="how to get this number">{{ option.itemType }}</td>
                                {% endifchanged %}
                            </tr>
                        {% endfor %}
                    </tbody>
                </table>

Единственный способ найти счетчик - это создать второй, идентичный, l oop, пробег по элементы, сосчитайте их, затем вставьте это число в строку, затем продолжите с исходным l oop. Это не кажется хорошим решением, поэтому я бы предпочел не go по этому маршруту. Любая помощь здесь очень ценится.

1 Ответ

0 голосов
/ 03 мая 2020

Мне удалось решить эту проблему, создав специальный фильтр, который возвращает количество элементов в категории. В пользовательском фильтре я запустил запрос к базе данных, отфильтровав результат по категории, а затем запустив счет.

В итоге я получил:

<table class="table table-sm">
   <thead>
       <tr>
          <td scope="col">Col 1</td>
          <td scope="col">Col 2</td>
       </tr>
   </thead>
   <tbody>
   {% for option in options %}
       <tr>
          <td>{{ option.itemNumber }}</td>
          {% ifchanged option.itemType %}
             <td rowspan="option.itemType|count_types">{{ option.itemType }}</td>
          {% endifchanged %}
      </tr>
      {% endfor %}
   </tbody>
</table>
...