我正在使用django开发博客应用...
这是我的模特。py
select mobile_id, region,
least(extract(epoch from max(time) - min(time)), 0) as diff
from (select t.*,
count(*) filter (where state = 'no_signal) over (partition by mobile_id, region order by time) as grp
from t
) t
group by mobile_id, region, grp;
我想知道如何计算特定类别下的博客总数?
我想跟踪所有类别的特定计数率...
答案 0 :(得分:4)
如果您要计算每个Blog
的{{1}}的数量,我们可以在Category
上做一个注释:
Category
但是(稍后指定),使用from django.db.models import Count
Category.objects.annotate(
num_blogs=Count(
作为相关名称是完全错误的,应该将其重命名为'Categories')
)categories
,因为这是相反的关系,在这种情况下,查询为:
blogs
结果是一个from django.db.models import Count
Category.objects.annotate(
num_blogs=Count(
包含所有'blogs')
)QuerySet
对象,并且每个Category
对象将具有一个属性Category
,该属性包含与此类别相关的博客数量
通过注释执行此操作的优点是可以避免“ N + 1 问题”:在这里,我们仍然执行 one 查询,而不执行 one < / em>查询类别,然后 n 查询获取该特定类别的博客计数。在MySQL中,查询如下所示:
num_blogs
注意:Python中的属性通常以小写字母开头(并在单词之间使用下划线),因此
SELECT category.*, COUNT(blog.id) FROM category LEFT OUTER JOIN blog ON blog.category_id = category.id GROUP BY category.id
和blog_title
而非category
和{ {1}}
注意:
Blog_title
是您赋予 reverse 关系的对象的名称,因此{{1} }应该是Category
,而不是related_name
。
答案 1 :(得分:2)
for title in categories.objects.all():
Blog.objects.filter(Category__Title=a.title).count()
这可以满足您的需求。
答案 2 :(得分:1)
[{"category_title":category.Title, "count":Blog.objects.filter(Category=category).count()} for category in categories.objects.all()]
这将给出带有类别标题及其对应计数的词典列表
答案 3 :(得分:-1)
您也可以使用类别模型。
Categories.objects.filter(Title="someName").Categories.all().count()