You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中显示分类关联的文章数量?

如何在Django中统计分类下的文章数量

我来帮你搞定这个问题!在Django里统计每个分类关联的文章数量,最高效的方式是用ORM的annotate方法,能避免低效的N+1查询问题,下面一步步来操作:

1. 修改视图层代码

首先在你的视图文件(比如views.py)里,获取分类列表时,用Count给每个分类对象添加文章数量的统计字段:

先导入需要的模块:

from django.db.models import Count
from .models import Category

然后编写对应的视图函数:

def category_list(request):
    # 用annotate给每个Category对象新增post_count属性,自动统计关联的文章数
    categories = Category.objects.annotate(post_count=Count('post_set'))
    return render(request, 'quickblog/category_list.html', {'categories': categories})

这里的post_set是Django自动生成的反向关联名称(因为你在Post模型的外键字段没设置related_name)。如果之后想让名称更直观,可以把Post里的外键改成category = models.ForeignKey(Category, related_name='posts', ...),这样就可以写成Count('posts')了。

2. 修改模板代码

在category_list.html里,直接调用我们新增的post_count属性来显示数量就好:

{% extends 'quickblog/base.html' %}
{% block content %}
{% for category in categories %}
 <div>
 <h1><u>{{ category.title }} ({{ category.post_count }})</u></h1>
 </div>
{% endfor %}
{% endblock %}

我把循环变量名改成了单数category(更符合语义),你可以根据自己的需求调整数量的显示格式,比如去掉括号或者改成其他样式。

备选方案(不推荐,仅作了解)

如果你不想用annotate,也可以在Category模型里加一个方法直接统计:

class Category(models.Model):
    # 你的现有字段...
    def post_count(self):
        return self.post_set.count()

模板里同样用{{ category.post_count }},但这种方法会让每个分类都触发一次数据库查询,分类多的时候性能会很差,所以优先推荐用annotate的方式。

内容的提问来源于stack exchange,提问作者user2352731

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:40:18