Django: как я могу отобразить 1 элемент поля в качестве заголовка с оставшимися элементами поля в качестве значения? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица, отображаемая внутри разборного компонента карты в стиле гармошки, который содержит три элемента Field (по одному на <td>). Используя forloop.counter, я пытаюсь отобразить каждый obj.frequency как складной заголовок со всеми связанными элементами obj.product и obj.price, отображаемыми в пределах collapsible-body.

Я понимаю, что текущая раскладка должна быть СУХОЙ, используя только один раз цикл object.rate_set.all. Я оставил два obj forloops, так как это единственный способ получить данные в разделе с откидным телом карты, даже если данные разделены неправильно.

Вопрос : Как я могу отобразить данные, связанные с frequency внутри тела карты с выводом frequency obj в качестве заголовка?

В дополнение к моему шаблону ниже приведен скриншот моего браузера для уточнения, если это необходимо

Мой шаблон:

 <div class="card">
   <div class="card-body">
      <ul class="collapsible popout">

        {% for obj in object.rate_set.all %}
        <!-- -------------------------------------------------
             displays each `frequency` obj in its own accordion card 
             as the header. output: 1x, 3x, 6x, 12x, 24x.. 
             ------------------------------------------------- -->
          {% if forloop.counter|divisibleby:3 %}
            <li>
              <div class="collapsible-header“>{{ obj.frequency }}</div>
                <div class ="collapsible-body">
          {% endif %}
        {% endfor %}

                  <div class="table-responsive card-text">
                    <table>
                      <thead>
                        <tr>
                          <th>Product</th>
                          <th>Rate</th>
                        </tr>
                      </thead>
                      <tbody>
                      <!-- -----------------------------------
                        displays all of the obj's in the last 
                        accordion card (24x)
                        ------------------------------------- -->
                       {% for obj in object.rate_set.all %}
                          <tr>
                            <td> {{ obj.product }} </a>
                            <td>${{ obj.price }}</td>
                          </tr>
                        {% endfor %}
                      </tbody>
                    </table>
                   </div>
                  </div> <!–- end of ‘collapsible-body' -->         
               </li>
            </ul>
         </div>
     </div>

enter image description here

1 Ответ

0 голосов
/ 25 апреля 2018

На основании ответа @ DisneylandSC ниже приведен обновленный рабочий шаблон:

<div class="card">
  <div class="card-body">
    {% regroup object.rate_set.order_by by frequency as frequency_list %}
    <ul class="collapsible popout">
      {% for frequency in frequency_list %}
        <li>
          <div class="collapsible-header">
            <i class="material-icons">view_day</i>{{ frequency.grouper }}&nbsp;Frequency Rate
          </div>
          <div class="collapsible-body">
            <div class="table-responsive card-text">
              <table class="table highlight">
                <thead>
                <tr>
                  <th>Product</th>
                  <th>Price</th>
                </tr>
                </thead>
                <tbody>
                {% for item in frequency.list %}
                  <tr>
                    <td>
                      <a class="nav-link" href="#">
                        {{ item.product }}
                      </a>
                    </td>
                    <td>${{ item.price }}</td>
                  </tr>
                {% endfor %}
              </table>
            </div>
          </div>
        </li>
      {% endfor %}
    </ul>
  </div>
</div>
...