Джанго: Как отменить поиск с помощью фильтра и считать
В моем шаблоне я хочу получить количество всех ответов на вопрос, где Answer.Value = "YES"
У меня есть две модели:
class Question(models.Model):
question = models.CharField(max_length=100)
class Answer(models.Model):
question = models.ForeignKey(Question)
value = models.CharField(max_length=3)
Мой взгляд:
def questn(request, question_id):
qobj = Question.objects.select_related().get(id="1")
return render(request, 'base.html', {'qobj': qobj})
Мой шаблон (base.html):
{{ qobj.answer_set.count }} //returns total count of all answers
{{ qobj.answer_set.filter(value="Yes").count }} //breaks my page...
Как правильно подсчитать все ответы "Да" на этот вопрос?
2 ответа
Решение
Django построен так, что вы должны поставить логику на ваш взгляд. Шаблон не должен содержать "продвинутую логику".
Сделайте запрос в представлении, отправьте результаты в шаблон.
return render(request, 'base.html', {'qobj': qobj, 'yes_count': qobj.answer_set.filter(value="Yes").count()})
Шаблон:
{{ yes_count }}
Вы также можете написать собственный шаблонный фильтр или использовать метод модели для достижения желаемого эффекта, я думаю, что это был бы путь "Djangoist".
Документация по написанию собственных шаблонов тегов и фильтров:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Пример по связанному вопросу:
Ваш вопрос в значительной степени дублирует этот: