在ListView中使用`get_context_data`过滤结果

时间:2018-10-08 20:05:15

标签: python django django-views

在ListView中,我想从发布模型中返回整个对象列表,并从预算模型中返回 total ,以将其包括在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 :(得分:0)

感谢@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>