在我的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)
这很有效。
但是,我希望按照BlogPost
s匹配最高Blog
次数的顺序收到结果。例如,我搜索的所有BlogPost
中出现的Blog
应该首先显示在列表中,而BlogPost
只显示在一个列表中Blog
s应出现在最后。
有没有办法在Django中这样做?
答案 0 :(得分:1)
试试这个:
BlogPost.objects.filter(q1 | q2).annotate(blog_times=Count('id')).order_by('blog_times')