Как сгенерировать общую сумму с помощью Django QuerySet и отобразить в шаблоне?

Я использую annotate с набором запросов Django для подсчета количества записей. Я использую его с filter и понимаю, что порядок имеет значение.

Мой запрос: numcontestants = Contestant.objects.filter(assigned_team__id=urlid).annotate(num_contestants=Count('id'))

Когда я передаю numcontestants в свой шаблон и отображаю его с помощью {{ numcontestants }}, я вижу набор запросов, содержащий каждую из записей, которые я хочу просмотреть. Когда я пытаюсь с:

{{ numcontestants.num_contestants }} Я ничего не получаю.

Я не хочу перебирать numcontestants, чтобы получить подсчет, я так понимаю, что num_contestants должно быть одним целым числом. Тем не менее, повторение не дает результата, который мне нужен, например, используя:

{% for x in numcontestants %} {{x.num_contestants}} {% endfor %}

выводит 1 1 1, когда я пытаюсь получить что-то, что будет выводить 3.

Каков правильный способ создания и доступа к подсчету суммы?


person Jake Rankin    schedule 07.12.2020    source источник


Ответы (1)


annotate возвращает число для каждой записи, вы можете получить num_contestants для первой записи:

{{ numcontestants.0.num_contestants }}

если вы хотите получить ряд результатов набора запросов, вы можете использовать .count() в своем наборе запросов

numcontestants = Contestant.objects.filter(assigned_team__id=urlid).count()
person Reza Heydari    schedule 07.12.2020
comment
Ааа как просто, спасибо. Все, что я читал о том, как подсчитывать записи, казалось, указывало на то, что count нужно использовать с аннотацией, я не осознавал, что могу использовать count непосредственно в наборе запросов. Чувствовать себя глупо, потому что пропустил что-то столь очевидное сейчас. - person Jake Rankin; 07.12.2020