我有一个Django应用程序,可以从一个用户表中检索所有主题。我还实现了一个输入搜索表单,这是执行的查询:
all_soggs = Entity.objects.filter(lastname__istartswith=request.GET['query_term']).order_by('lastname')
if(all_soggs.count()==0):
all_soggs = Entity.objects.filter(firstname__istartswith=request.GET['query_term']).order_by('firstname')
字符串
如您所见,查询首先按姓氏搜索匹配项,然后按名字搜索。直到我插入完整的名字'firstaname lastname'或'lastname firstname',在这种情况下没有结果.我如何修改查询以使一个更好的搜索?
谢谢-卢克
4条答案
按热度按时间jfgube3f1#
复制/粘贴自:https://stackoverflow.com/a/17361729/1297812
字符串
33qvvth12#
您需要Q对象,还需要将查询拆分为单独的术语(因为没有名字会匹配完整的字符串“Firstname”)。
这里有一个想法,匹配任何名或姓开始的“Firstname”搜索“Firstname”或“Lastname”。
这是一个通用搜索-调整查询以满足您的特定需求!
编辑:哎呀,我真的不喜欢使用reduce,因为它看起来很混乱,但是这些需要一起进行OR运算,我们不能做一个更详细的版本,因为术语的数量是未知的。
字符串
为了阐明如何使用Q对象,给定搜索“Firstname Lastname”,上一个查询等于:
型
ct2axkht3#
这是一个相当古老的问题,但我刚刚遇到了同样的问题,我想我会分享一个更优雅的解决方案。
字符串
这是唯一的解决方案,我已经发现,让给我想要的行为,IE搜索与一个完整的名称字符串与一个空格(“John Doe”)和一个部分字符串(“John Do”).
jexiocij4#
类似问题:Querying full name in Django
字符串