Django -访问在模板中通过特定值过滤的查询集的计数



我甚至对这个问题的标题都有问题:)我在所有编码方面都是初学者,但我喜欢通过Django项目学习。通常我可以通过搜索来一点一点地解决我的问题,但是我在下面失败了,虽然我确信有一个简单的解决方案,但我被卡住了……在下面,我在我的html代码中做了以下操作:

步骤1。从我的观点来看,我正在获得上下文'程序区域,并使用for循环列出属于该区域的程序列表。

步骤2。在表中的第二列中,我显示了数据库中该特定程序的合作伙伴总数(使用related_name 'PartofProgramme)。'用于外键)。到目前为止一切顺利,一切正常。

步骤3。当我在这个阶段检查'程序时。一部分,Programme.all'包含如下查询集:",等等等等。列出属于被过滤程序的所有合作伙伴。对于表中的第三列,我想显示状态为的合作伙伴的数量__Value = ' active '。我如何从我的html模板,它现在说"##得到活跃的合作伙伴##计数"下面访问这个?

从下面的代码中剪切。

index_alt.html

{% regroup programmes by region as region_list %}
[…]
<div class="tab-content">
{% for region in region_list %}
[...]
<tr>
<th scope="col">Programmes in {{region.grouper }} </th>
<th scope="col">Registered partners</th>
<th scope="col">Active</th>
</tr>
</thead>

<tbody>
{% for programme in region.list|dictsort:"programme"  %}
<tr>
<th scope="row">{{ programme }}</th> #name of programme in region in rows
<td>{{ programme.PartofProgramme.all.count }}</td> #number of registered partners in programme
<td> {{  ##get count of active partners## }}</td> #get number of partners with status__code=’active’
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}

views.py

class DevView(generic.ListView):
template_name = "maindb/index_alt.html"
model = Programme
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['programmes'] = Programme.objects.all().order_by('region')
return context

models.py

class Region(models.Model):
region = models.CharField(max_length=200)
class Programme(models.Model):
programme = models.CharField(max_length=200)
region = models.ForeignKey('Region', on_delete=models.SET_NULL, null=True, blank=True,  related_name="regions", verbose_name="Region")
class TagStatus(models.Model):
code = models.CharField(max_length=20)
field = models.CharField(max_length=100, null=False)
class Partner(models.Model):
name = models.CharField(max_length=200)
programme = models.ForeignKey('Programme', on_delete=models.SET_NULL, null=True, blank=True,    related_name="PartofProgramme")
status = models.ForeignKey('TagStatus', on_delete=models.SET_NULL, null=True, blank=True)

您可以使用自定义过滤器。

的例子:

@register.filter
def status_active_count(partners):
return partners.filter(status__code="active").count()
# in template
{{ programme.PartofProgramme.all|status_active_count }}

你可以在这里阅读更多内容:https://docs.djangoproject.com/en/4.0/howto/custom-template-tags/registering-custom-filters

最新更新