2017-04-21 72 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")