首页 > 解决方案 > 如何在get_context_data的Django中获取具有相同参数的每个字段的计数的数组?

问题描述

我将 ListView 用作显示数据库中所有车辆的模板。每辆车可以有更多的轮子,我试图在同一个模板中显示每个传感器有多少视图。

这些模型通过一个名为“vehicle_id”的字段相互关联。知道如何在views.py中做到这一点吗?

在一定程度上起作用的线如下

context['number_of_wheels'] = wheels.objects.filter(vehicle_id= F('vehicle_id')).count()

但是,这会计算数据库中的所有车轮,并为所有条目显示相同的值。知道如何单独计算、存储和显示它们吗?

标签: pythondjango

解决方案


无需将这些数字添加到上下文变量中。它可能会增加更多复杂性,例如将该数字与传感器匹配。

你可以.annotate(..)Sensor的 s,所以在 中queryset,你可以写:

from django.views.generic.list import ListView
from app.models import Sensor

class SensorListView(ListView):
    queryset = Sensor.objects.annotate(
        nviews=Count('sensorview')
    )
    template = 'some_template.html'

Sensor源自此的每个QuerySet都会有一个额外的属性nviews,其中包含相关SensorViews 的数量。

然后,您可以在 中渲染它some_template.html,例如:

{% for sensor in object_list %}
    {{ sensor }}: {{ sensor.nviews }}
{% endfor %}

推荐阅读