按匹配数排序Django查询结果

时间:2014-08-01 12:47:10

标签: python django django-queryset

在我的Django应用中,我有BlogBlogPosts

他们的模型基本上是这样的:

class Blog(models.Model):
    name = models.CharField(Entry)
    details = models.TextField()
    ...

class BlogPost(models.Model):
    blog = models.ForeignKey(Blog)
    title = models.CharField()
    ...

鉴于博客名称列表,我想返回至少一个给定博客中出现的所有BlogPost

我已经弄清楚如何使用Q个对象做到这一点。我已经创建了这样的查询:

# Return blogs that appear in either nameOfBlog1 or nameOfBlog2
q1 = Q(blog__name = nameOfBlog1)
q2 = Q(blog__name = nameOfBlog2)
Blog.objects.filter(q1 | q2)

这很有效。

但是,我希望按照BlogPost s匹配最高Blog次数的顺序收到结果。例如,我搜索的所有BlogPost中出现的Blog应该首先显示在列表中,而BlogPost只显示在一个列表中Blog s应出现在最后。

有没有办法在Django中这样做?

1 个答案:

答案 0 :(得分:1)

试试这个:

BlogPost.objects.filter(q1 | q2).annotate(blog_times=Count('id')).order_by('blog_times')