亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何制作使用“姓名”的搜索表單

如何制作使用“姓名”的搜索表單

手掌心 2023-10-31 16:32:53
基本上問題是,目前如果我搜索確切的“姓名”或確切的“姓氏”,我的搜索欄正在工作,但是,如果用戶搜索“姓名”或者即使用戶搜索“姓氏”,我希望它也能工作。名字或姓氏拼寫錯誤,但兩者中至少有一個是正確的。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)
查看完整描述

2 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

您可以使用、 空格和的[?.annotate(…)Django-doc]來Concat[Django-doc]查詢集:namecogname


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)

)

(...) 或者即使用戶拼錯了名字或姓氏,但兩者中至少有一個是正確的。

為此,您將需要更高級的搜索技術,例如Elasticsearch后端,并且您可以利用django-haystack[readthedocs]與這些后端進行對話。


查看完整回答
反對 回復 2023-10-31
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

也許在那里做一些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)

如果需要,您可以使用集合以防出現重復結果


查看完整回答
反對 回復 2023-10-31
  • 2 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號