如何在Django中计算和显示ManyToMany关系的对象数量

2 投票
2 回答
4585 浏览
提问于 2025-04-15 16:13

我有一个简单的模型,里面有新闻和分类:

class Category(models.Model):
    name = models.CharField()
    slug = models.SlugField()

class News(models.Model):
    category = models.ManyToManyField(Category)
    title = models.CharField()
    slug = models.SlugField()
    text = models.TextField()
    date = models.DateTimeField()

我想统计每个分类下的新闻数量,并在网站上显示出来,像这样:

Sport (5)
School (4)
Films (6)
Computer (2)
etc...

我该怎么做呢??

谢谢!

2 个回答

1

非常简单:

>>> for category in Category.objects.all():
...     print category.name, category.news_set.count()
7

看看Django 1.1中的annotate()函数。

http://docs.djangoproject.com/en/dev/topics/db/aggregation/#topics-db-aggregation

下面是一个例子(来自上面的链接):

>>> q = Book.objects.annotate(num_authors=Count('authors'))
>>> q[0].num_authors
2
>>> q[1].num_authors
1

撰写回答