Фильтрация результатов с использованием `get_context_data` в ListView - PullRequest
0 голосов
/ 08 октября 2018

В моем ListView я хочу вернуть весь список объектов из моей модели Publication и вернуть total из моей модели Budget для включения в ListView с каждым заголовком и общей суммой.

Мои модели:

Приложение публикации

class Publication(models.Model):
      title = models.CharField(...)

Приложение бюджета

class Budget(models.Model):
      total = models.DecimalField(...)
      publication = models.ForeignKey(Publication, ...)

Просмотры: Приложение публикации

class PublicationListView(ListView):
      context_object_name = 'publications'
      model = Publication

      def get_context_data(self, **kwargs):
          context = super(PublicationListView, self).get_context_data(**kwargs)

          context['publication'] = self.get_queryset()
          context['budget'] = Budget.objects.all()

          return context

Шаблон: Приложение публикации

<tbody>
   {% for pub in publications %}
    <tr>
        <td><a href="{{ pub.pk }}">{{ pub.title }}</a>
            <span class="float-right">
                 {% for obj in budget %}
                     {{obj}}
                 {% endfor %}
            </span>
        </td>
    </tr>
   {% endfor %}
</tbody>

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

publication 1               1000 2000 3000
publication 2               1000 2000 3000
publication 3               1000 2000 3000

Но мне нужно:

publication 1               1000
publication 2               2000
publication 3               3000

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

Является ли использование get_context_data() лучшим вариантом для этого?

1 Ответ

0 голосов
/ 09 октября 2018

Благодаря указаниям @HakenLid и @WillemVanOnsem ниже представлены обновленный вид и шаблон для достижения желаемого результата

Просмотр

class PublicationListView(ListView):
      context_object_name = 'publications'
      model = Publication

Шаблон

<tbody>
   {% for pub in publications %}
    <tr>
        <td><a href="{{ pub.pk }}">{{ pub.title }}</a>
            <span class="float-right">
                 {% for budget in pub.budget_set.all %}
                     {{ budget }}
                 {% endfor %}
            </span>
        </td>
    </tr>
   {% endfor %}
</tbody>
...