在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()
是最好的选择吗?
答案 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>