【发布时间】:2014-07-01 10:15:57
【问题描述】:
我最近询问了如何计算模板中的过滤子查询,并在这里得到了答案:Get count on filtered subqueries in template
现在我意识到我需要这个扩展如下(我认为这比我的第一个问题要多得多,因此在这里创建一个新问题):
- 显示与标签不匹配的文章,但计数为 0。
- 扩展以允许对不同的标签进行计数。
使用以下模型:
class Category(models.Model):
...
class SubCategory(models.Model):
category = models.ForeignKey(Category)
....
class Tag(models.Model):
....
class Article(models.Model)
sub_category = models.ForeignKey(SubCategory)
tag = models.ForeignKey(Tag)
我得到了以下答案 (views.py),它将创建一个 num_articles 变量来保存 tag='xyz' 的文章数:
def my_view(request, other, arguments):
...
subcategories = category.sub_category_set.filter(tag__tagname='xyz') \
.annotate(num_articles=Count('article__id'))
还有模板:
{% for subcategory in subcategories %}
{{ subcategory.name }} -- {{ subcategory.num_articles }}
{% endfor %}
但现在,我希望能够做这样的事情,让 独立 计数几个不同的标签,这样 'xyz' 的计数不依赖于 'abc' 的计数,反之亦然:
def my_view(request, other, arguments):
...
subcategories = category.sub_category_set. \
filter(tag__tagname='xyz').annotate(num_articles_xyz=Count('article__id')) \
filter(tag__tagname='abc').annotate(num_articles_abc=Count('article__id')) \
filter(tag__tagname='def').annotate(num_articles_def=Count('article__id')) \
...
在模板中用作:
{% for subcategory in subcategories %}
{{ subcategory.name }} -- {{ subcategory.num_articles_xyz }}<br />
{{ subcategory.num_articles_abc }} -- {{ subcategory.num_articles_def }}
...
{% endfor %}
并且还希望显示所有子类别,即使任何计数都不匹配。但是,该计数的值为 0。
【问题讨论】:
标签: python django django-models django-templates django-views