Django:如何使用filter和count反向查找

时间:2013-10-04 16:54:51

标签: python django django-queryset reverse-lookup

在我的模板中,我想得到一个问题的所有答案的计数,其中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 个答案:

答案 0 :(得分:1)

构建Django是为了让你必须在你的视图中放置逻辑。该模板不应包含“高级逻辑”。

在视图中执行查询,将结果发送到模板。

    return render(request, 'base.html', {'qobj': qobj, 'yes_count': qobj.answer_set.filter(value="Yes").count()})

模板:

{{ yes_count }}

答案 1 :(得分:0)

您也可以编写自定义模板过滤器或使用模型方法获得所需效果,我相信这将是“Djangoist”的方式。

编写自己的模板标签和过滤器的文档:

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

相关问题的一个例子:

https://stackoverflow.com/a/1333277/1453607

你的问题几乎与这个问题重复:

django template system, calling a function inside a model