2017-04-21 48 views
0

我有一個PostProfile模型。我試圖找出用戶帖子列表中最常見的category查詢查詢中最常用的字段值

這裏是我的模型:

class Post(models.Model): 
    user = models.ForeignKey(User, blank=True, null=True) 
    category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='1') 

class Profile(models.Model): 
    user = models.ForeignKey(User, blank=True, null=True) 

    def most_common_category(self): 
     posts = Post.objects.filter(user=self.user) 
     for post in posts: 
      print(post.category) # 1, 1, 2, 3, 2, 2, 4, 1, 2, 2 

我會怎麼做呢?

+0

請參閱http://stackoverflow.com/a/629691/3901060瞭解如何使用'annotate'完成此操作。您只需將名稱改爲類別。 – FamousJameous

回答

0
from django.db.models import Count 

most_common = Post.objects.annotate(mc=Count('category')).order_by('-mc')[0].mc 

你可以找到the docs

+0

剛剛嘗試過,並沒有按最常見的類別進行排序。編輯:現在它工作,謝謝。 – Zorgan

+0

我已經嘗試過,更多的職位是類別2,而不是類別1,但它仍然說類別1是最常見的。這似乎只打印查詢集中的第一個類別。 – Zorgan

+0

你可以檢查最常見的所有類別'Post.objects.annotate(mc = Count('category'))。order_by(' - mc')' –

0

更多信息您可以通過使用原始查詢做到這一點。在原始查詢表中,必須是您給予類Meta的名稱:或者將表名保存在數據庫shema中。或者您可以使用.values

most_common = Post.objects.values("category").annotate(count=Count('category')).order_by("-count")