annotate 使用方法:
有时候我们需要连接两个表做一些查询,比如博客中有两个模型,一个文章模型,一个分类模型,分类模型是文章中的分类字段的外键,如果我们需要查询每个分类下文章的数量,最简单的方法就是先将所有分类查到:
categories = NewsCategory.objects.all()
文章模型名称为News
然后每个分类django都会自动给你添加一个属性category.news_set,这个方法就可以拿到分类对应的文章,然后category.news_set.count()就可以拿到每个分类有多少个文章了。
但是这个方法很低级啊,如果想高级一点,查询性能更优化,annotate了解一下
现在就可以对上面的查询方法进行优化了。
categories = NewsCategory.objects.annotate(num_count=Count('news'))
annotate中其实是给categories(Queryset)添加了一个属性,Queryset中的每个对象都会有这么一个属性
现在可以这样查询分类下的文章数量:category.num_count()
将代码贴出来
原先的代码:
def cms_news_category(request):
categories = NewsCategory.objects.all()
context = {
'categories': categories
}
return render(request, 'cms/category.html', context=context)
模板category.html中的代码:
{% for categ