如何按Django中匹配的字段排序查询结果?

2024-03-28 09:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个搜索字段,它将搜索标题或描述中的一个术语,并返回匹配的所有文章的列表。在

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

^{pr2}$

但从第一个例子来看,顺序似乎没有变化。在

This SO answer似乎介绍了如何通过创建一个评分系统来使用原始SQL来实现这一点。用Django来实现这个?在


Tags: 标题列表searchgetmodelsrequestdef文章
1条回答
网友
1楼 · 发布于 2024-03-28 09:53:16

Django准备然后对db执行一个查询,但是可以通过将queryset转换为list来调用force,例如:

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)

相关问题 更多 >