我有一个帖子列表,我使用简单的搜索功能进行过滤,该功能根据查询列表获取结果。当我使用一个关键字时它工作正常,但当我搜索多个关键字时,会考虑第一个关键字,而忽略其他关键字。
例如,如果我搜索“木材”,我将得到包含“木材”的所有结果(包含在内容描述或帖子名称中),但如果我搜索“木板”,我仍然会得到只需获取包含“木材”的结果,相反,我只想获取同时包含两个关键字“木板”的结果。
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/