Подсчет булевых значений внутри цикла for в шаблоне django
Я хотел бы знать, как подсчитать все булевы true/false внутри цикла for в моем шаблоне django, но я не уверен, как этого добиться внутри цикла. Моя цель - показать пользователю, сколько вопросов осталось нерешенными/решенными.
допустим, это мои модели:
class Category(models.Model):
name = models.CharField(max_length=50)
class Question(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
description = models.TextField(max_length=250)
solved = models.BooleanField(default=False)
ListView:
class CategoryView(ListView):
model = Category
context_object_name = 'categories'
Шаблон:
{% for category in categories %}
{{ category.name }} # I would like to show: 5/10 questions solved
{% for question in category.question_set.all %}
{{ question.name }}
{{ question.title }}
{{ question.description }}
{{ question.solved }}
{% endfor %}
{% endfor %}
Обычно я вывожу общее количество объектов с помощью .count, например: {{ cagetories.count }}
.
Но я не могу сделать это внутри цикла, потому что он возвращает: 1 1 1 1 1 1 1:
{% for question in category.question_set.all %}
{% if not question.solved %}
{{ question.count }} ## returns 1 1 1 1 1 1
{% endif %}
{% endfor %}
То же самое с {{ forloop.counter }} он возвращает несколько чисел из-за цикла, но мне нужно только последнее число:
{% for question in category.question_set.all %}
{% if not question.solved %}
{{ forloop.counter }} # returns; 1 2 3 4 5 6
{% endif %}
{% endfor %}
<
Лучше было бы вычислять это внутри представления, а не в шаблоне:
class CategoryView(ListView):
model = Category
def get(self, request, *args, **kwargs):
categories = []
for category in self.get_queryset():
questions = category.question_set.all()
count = sum([q.solved for q in questions])
categories.append([questions, count])
return render(request, 'TEMPLATE NAME HERE', {'categories': categories})
Теперь в шаблоне вы можете просмотреть каждую категорию, а также получить доступ к количеству решенных задач:
{% for questions, solved_count in categories %}
{# display solved count and then loop through questions #}
{% endfor %}