Шаблон Django и цикл по списку элементов - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы зациклить некоторые объекты, помещенные в список, и получить статистику по каждому из них.Я использую Django 1.11.16

Пользователь может выбрать одну или несколько публикаций, и я отображаю статистику по каждой публикации в списке.

У меня есть часть просмотра, которая выглядит следующим образом:

def get_context_data(self, **kwargs):

    publication_list = self.request.GET.getlist('publication_list')

    publication_selected = Publication.objects.filter(id__in=publication_list)

    download_all_period = Download.objects.values('usage', 'doc__publication__pub_id') \
                    .filter(
                        doc__publication__id__in=publication_list) \
                    .filter(
                        Q(creation_date__gte=start_date) & Q(creation_date__lte=end_date))\
                    .aggregate(
                        nusage=Sum('usage'))

    request_all_period = Download.objects.values('doc__publication__pub_id')\
                    .filter(
                        doc__publication__id__in=publication_list)\
                    .filter(
                        Q(creation_date__gte=start_date) & Q(creation_date__lte=end_date))

    all_period_list = zip(publication_selected, download_all_period, request_all_period)

    context_data['publication_list'] = publication_list
    context_data['publication_selected'] = publication_selected
    context_data['download_all_period'] = download_all_period
    context_data['request_all_period'] = request_all_period
    context_data['all_period_list'] = all_period_list

return context_data

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

{% for publication_selected, download_all_period, request_all_period in all_period_list %}
  {% if download_all_period.nusage %}
    <tr>
      <td>{{ start_date|date:"Y/m/d" }} to {{ end_date|date:"Y/m/d" }}</td>
      <td>{{ publication_selected }}</td>
      <td><span class="badge alert-danger">{{ download_all_period.nusage }}</span> / <span
        class="badge alert-info">{{ request_all_period.count }}</span></td>
    </tr>

  {% else %}
    <tr>
      <td>{{ start_date|date:"d/m/Y" }} to {{ end_date|date:"d/m/Y" }}</td>
      <td>{{ publication_selected }}</td>
      <td>{% trans 'No downloads/No requests' %}</td>
    </tr>
  {% endif %}
{% endfor %}

Он отображает только последний объект в моем списке, и я всегда нахожусь внутри части {% else %}, покаЯ могу распечатать статистику для этого конкретного объекта.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы должны использовать ANNOTATE, а не AGGREGATE в запросе download_all_period,

https://stackoverflow.com/a/45983784/6348368

...