按匹配数量排序Django查询结果
在我的Django应用中,我有一些Blog
(博客)和BlogPosts
(博客文章)。
它们的模型大致是这样的:
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)
这个方法是有效的。
不过,我希望结果能够按照匹配到的Blog
数量来排序。也就是说,出现在我搜索的所有Blog
中的BlogPost
应该排在最前面,而只出现在一个Blog
中的BlogPost
应该排在最后。
在Django中有没有办法做到这一点呢?
1 个回答
1
试试这个:
BlogPost.objects.filter(q1 | q2).annotate(blog_times=Count('id')).order_by('blog_times')