Django:如何过滤并获取包含所有搜索关键字的结果

标签 django search filter

我有一个帖子列表,我使用简单的搜索功能进行过滤,该功能根据查询列表获取结果。当我使用一个关键字时它工作正常,但当我搜索多个关键字时,会考虑第一个关键字,而忽略其他关键字。

例如,如果我搜索“木材”,我将得到包含“木材”的所有结果(包含在内容描述或帖子名称中),但如果我搜索“木板”,我仍然会得到只需获取包含“木材”的结果,相反,我只想获取同时包含两个关键字“木板”的结果。

def searchimages(request):
if request.method == 'GET':
    queryset= request.GET.get('q', '').split(" ")

    submitbutton= request.GET.get('submit')

    if queryset is not None:

        queryset_list1= Q()

        for query in queryset:
            queryset_list1 |= (
            Q(name__icontains=query) |
            Q(content__icontains=query) |
            Q(format__icontains=query) |
            Q(contentdetail__icontains=query)
            )

            results = Image.objects.filter(queryset_list1).distinct().order_by('-date_posted')


            context={'results': results,
            'submitbutton': submitbutton}

            return render(request, 'search/search.html', context)

        else:
            return render(request, 'search/search.html')

    else:
        return render(request, 'search/search.html')

有没有人能解决这个问题?

最佳答案

正如我在评论中所说,问题出在你的缩进中。您正在返回 for 循环内部。将代码更改为:

def searchimages(request):
    if request.method == 'GET':
        queryset= request.GET.get('q', '').split(" ")
        submitbutton= request.GET.get('submit')
        if queryset is not None:
            queryset_list1= Q()
            for query in queryset:
                queryset_list1 |= (
                Q(name__icontains=query) |
                Q(content__icontains=query) |
                Q(format__icontains=query) |
                Q(contentdetail__icontains=query)
                )
            results = Image.objects.filter(queryset_list1).distinct().order_by('-date_posted')
            context={'results': results,
            'submitbutton': submitbutton}
            return render(request, 'search/search.html', context)
        else:
            return render(request, 'search/search.html')
    else:
        return render(request, 'search/search.html')

关于Django:如何过滤并获取包含所有搜索关键字的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66423072/

相关文章:

django - 无法从主机访问 VMWare guest Web 服务器

python - 使Django不懒加载模块,方便开发

java - 如何在文本文件中查找某些单词,然后在Java中查找数字?

algorithm - 游戏中的搜索算法?

mysql - Codeigniter + MySQL - 搜索包含字符串

regex - 从 ARRAYFORMULA 中排除字符串

swift - 将过滤后的@Bindable 对象传递给 SwiftUI 中的多个 View

Python/pip,如何从 github 安装特定版本的 git 存储库(正确的 url 是什么)?

C# 过滤字符之间空格数量未定义的单词

javascript - 在我的 Django TextField 中使链接可点击