2009-11-20 51 views
3

顯示有關多對多的對象我有新聞和類別一個簡單的模型:如何計算並在Django

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... 

我該怎麼做?

謝謝!

回答

7

從Django 1.1中檢出annotate()函數。

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

實施例(從該URL以上):

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

我想這一點,但我得到AttributeError的: '管理器' 對象沒有屬性'註釋' – Matthew 2009-11-20 22:09:20

+1

好吧,它的工作原理,但我想在類別中計數新聞,而不是新聞中的類別... – Matthew 2009-11-20 22:37:32

+0

Category.objects.all()。annotate(num_news = Count('news_set')) – 2009-11-21 00:16:06

1

很簡單:

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

這太過分了。 – 2015-09-28 05:31:33