Reputation: 6196
In my template, I want to get a count of all answers for a question where the Answer.Value = "YES"
I have two models:
class Question(models.Model):
question = models.CharField(max_length=100)
class Answer(models.Model):
question = models.ForeignKey(Question)
value = models.CharField(max_length=3)
My View:
def questn(request, question_id):
qobj = Question.objects.select_related().get(id="1")
return render(request, 'base.html', {'qobj': qobj})
My Template (base.html):
{{ qobj.answer_set.count }} //returns total count of all answers
{{ qobj.answer_set.filter(value="Yes").count }} //breaks my page...
What is the proper way to get a count of all "Yes" answers for this question?
Upvotes: 0
Views: 1525
Reputation: 118
You could also write a custom template filter or use a model method for the desired effect, I believe that would be the "Djangoist" way to go.
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
https://stackoverflow.com/a/1333277/1453607
Your question is pretty much a duplicate of this one:
django template system, calling a function inside a model
Upvotes: 0
Reputation: 118448
Django is built so that you have to put logic in your view. The template is not supposed to contain "advanced logic".
Do the query in the view, send the results to the template.
return render(request, 'base.html', {'qobj': qobj, 'yes_count': qobj.answer_set.filter(value="Yes").count()})
Template:
{{ yes_count }}
Upvotes: 1