如何订购在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)
OK啊,我想通查询集懒惰是问题。这工作 - 谢谢! –