Python 如何使搜索表单与“一起使用”;“姓名”;
基本上,问题是,目前我的搜索栏在搜索准确的“姓名”或“姓氏”时起作用,但是,如果用户搜索“姓名姓氏”,或者即使用户拼错了姓名或姓氏,但至少其中一个是正确的,我希望它也起作用Python 如何使搜索表单与“一起使用”;“姓名”;,python,django,search,Python,Django,Search,基本上,问题是,目前我的搜索栏在搜索准确的“姓名”或“姓氏”时起作用,但是,如果用户搜索“姓名姓氏”,或者即使用户拼错了姓名或姓氏,但至少其中一个是正确的,我希望它也起作用 def search(request): query = request.GET.get("q", None) qs = DeathAd.objects.all() if query is not None: qs = qs.filter(
def search(request):
query = request.GET.get("q", None)
qs = DeathAd.objects.all()
if query is not None:
qs = qs.filter(
Q(nome__icontains=query) |
Q(cognome__icontains=query)
)
context = {
"object_list": qs,
}
template = "search.html"
return render(request, template, context)
您可以使用名称
、空格和cogname
来设置查询:
from django.db.models import Value
from django.db.models.functions import Concat
qs = qs.annotate(
full_name=Concat('nome', Value(' '), 'cognome')
).filter(
Q(nome__icontains=query) |
Q(cognome__icontains=query) |
Q(full_name__icontains=query)
)
从django.db.models导入值
从django.db.models.functions导入Concat
qs=qs.annotate(
全名=Concat('nome',Value('','cognome'))
).过滤器(
Q(nome\uuu icontains=query)|
Q(cognome\uuu icontains=query)|
Q(全名=查询)
)
(…)或者即使用户拼错了名称或姓氏,但至少其中一个是正确的
def search(request):
query = request.GET.get("q", None)
qs = DeathAd.objects.all()
if query is not None:
qs = qs.filter(
Q(nome__icontains=query) |
Q(cognome__icontains=query)
)
context = {
"object_list": qs,
}
template = "search.html"
return render(request, template, context)
为此,您将需要更先进的搜索技术,如Elasticsearch后端,您可以利用这些后端进行对话。也许可以在其中使用一些python。为什么不使用破折号“”拆分查询,将姓名和姓氏分隔成一个列表。然后创建要附加到的空列表。像这样,
def search(request):
query = request.GET.get("q", None).split(' ')
q_list = []
if query is not None:
for qs in query:
result = DeathAd.objects.filter(qs)
q_list.append(result)
context = {
"object_list": q_list,
}
template = "search.html"
return render(request, template, context)
如果您愿意,您可以使用集合,以防出现不准确的结果谢谢您,先生,您的解决方案似乎很有效,您的猜测很有见地。您有什么建议可以将分页器添加到此视图中吗?