如何订购在Django中匹配字段的查询结果?

问题描述:

我已经创建了一个搜索字段,将搜索标题或描述中的术语的帖子,并返回匹配的所有帖子的列表。如何订购在Django中匹配字段的查询结果?

def search(request): 
    term = request.GET.get('q') 
    posts = models.Post.objects.filter(
     Q(title__icontains=term) | Q(description__icontains=term) 
    ) 
    return render(request, 'posts/post_list.html', {'posts': posts}) 

这工作,但我想订购的结果,以便与包含搜索项目现身第一批图书,其次是那些标题不包含搜索词的帖子,但确实说明。

我试图创建两个查询和union荷兰国际集团他们像这样:

good_matches = models.Post.objects.filter(
     Q(title__icontains=term)) 
just_ok_matches = models.Post.objects.filter(
     ~Q(title__icontains=term) & Q(description__icontains=term) 
    ) 
posts = good_matches | just_ok_matches 

但秩序似乎是从第一个例子不变。

This SO answer似乎涉及如何通过创建一个评分系统与原始SQL做到这一点。也许有一种方法可以通过Django的ORM实现这一点?

Django的准备,然后再执行一个查询数据库,但是你可以调用转换查询集力列举,例如:

good_matches = models.Post.objects.filter(
     Q(title__icontains=term)) 
just_ok_matches = models.Post.objects.filter(
     ~Q(title__icontains=term) & Q(description__icontains=term) 
    ) 
posts = list(good_matches) + list(just_ok_matches) 
+0

OK啊,我想通查询集懒惰是问题。这工作 - 谢谢! –