Как получить массив с подсчетами каждого поля с одинаковым параметром в Django в get_context_data? - PullRequest
1 голос
/ 10 июля 2019

Я использую ListView для шаблона, который отображает все транспортные средства в базе данных. Каждое транспортное средство может иметь больше колес, и я пытаюсь отобразить в том же темпале, сколько просмотров имеет каждый датчик.

Модели связаны друг с другом полем с именем «vehicle_id». Любая идея, как я мог бы сделать это в views.py?

Линия, которая работает до некоторой степени, следующая

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

Однако при этом учитываются все колеса в базе данных и отображается одинаковое значение для всех записей. Любая идея, как я могу считать, хранить и отображать их по отдельности?

1 Ответ

1 голос
/ 10 июля 2019

Нет необходимости добавлять эти числа в переменную контекста.Это, вероятно, добавило бы больше сложности, например, чтобы сопоставить это число с датчиками.

Вы можете .annotate(..) свои Sensor с, поэтому в queryset вы можете написать:

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

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

Каждый Sensor, который исходит из этого QuerySet, будет иметь дополнительный атрибут nview s, который содержит количество связанных SensorView s.

Затем вы можете отобразить это в some_template.html, как:

{% for sensor in object_list %}
    {{ sensor }}: {{ <b>sensor.nviews</b> }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...