Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使搜索表单与“一起使用”;“姓名”;_Python_Django_Search - Fatal编程技术网

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)

如果您愿意,您可以使用集合,以防出现不准确的结果

谢谢您,先生,您的解决方案似乎很有效,您的猜测很有见地。您有什么建议可以将分页器添加到此视图中吗?