博客一般都有文章分类以及对应文章数量等栏目,这样可以方便读者快速了解博客的规模,那么我们在Django中应该怎么实现呢?
假设我们的博客文章的模型如下
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=20)
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
category = models.ForeignKey(Category)
def __str__(self):
return self.title
我们知道从数据库拿出数据都是使用模型管理器 objects 实现的。
比如获取全部分类是:Category.objects.all() ,假设有一个名为 Django 的分类,那么获取该分类的方法是:Category.objects.get(name='Django') 。objects 除了 all、get 等方法外,还有很多操作数据库的方法,而其中有一个 annotate 方法,该方法正可以帮我们实现本文所说的统计分类下文章数量的功能。
代码如下:
from django.db.models.aggregates import Count
from blog.models import Category
# Count 计算分类下的文章数,其接受的参数为需要计数的模型的名称
category_list = Category.objects.annotate(num_posts=Count('article'))
这里 annotate 不仅从数据库获取了全部分类,相当于使用了 all 方法,它还帮我们为每一个分类添加了一个 num_posts 属性,其值为该分类下的文章数,这样我们在模板中就可以调用这个属性,例如:
% for category in category_list %}
<li>
<a href="{% url 'category' category.id %}">
{{ category.name }} ({{ category.num_posts }})</a>
</li>
{% endfor %}
这样实现的效果就是分类名后跟着该分类下的文章数了。
最后修改于2020年4月9日 21:13
©允许规范转载
Django Python版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.yangyingqi.com/35.html