我有一个Django应用程序,它从模型Classified
中搜索数据,并使用基于输入术语的简单查询集显示它们。这很有效,我对此方法没有抱怨。
但是,如果有人输入的术语不返回任何数据,我想提供备用/建议搜索的选项。
例如:有人搜索“救护车服务”'它没有返回数据。我想建议“救护车”#39;或者'服务'作为备用搜索选项,可根据模型中存在的数据从模型返回数据。
我用Google搜索了suggested search in django
,它给了我干草堆/弹性搜索等选项,由于搜索仅涉及一个模型,因此我不确定是否真的需要。
注意:SO告诉我,我的问题可能会被关闭,因为它是主观的。如果是这样的话,请建议我可以将它移动到哪里。谢谢!
答案 0 :(得分:1)
Haystack确实是一个很好的选择,here你会发现如何提供'拼写建议',你可以看到一个例子in this OS question/answer
无论您只有一个型号,这个工具都非常棒,安装/设置/使用简单,而且非常灵活。
也许this也有帮助。
答案 1 :(得分:1)
这只是一个想法,但可能适合你:
用户输入搜索数据:“救护车服务”
如果视图中的查询没有返回任何内容,请使用您选择的替代搜索数据重定向到同一视图,让我们说“Ambulance”,以及一个标记值,表示您正在执行建议搜索的视图。< / p>
您必须考虑两件事:
如果备用搜索没有返回任何内容怎么办?你必须在这里设置一个递归限制。
我将如何选择备用搜索的数据?那么,这是另一个关于一个完全不同主题的问题。
这是代码中的这个想法:
def search(request, data, alternate=False, recursion_level=3):
result = Classified.objects.filter(some_filed=data)
if 0 == result.count() and 0 != recursion_level: # Conditions needed for perform alternate search.
new_data = select_new_data(data) # The logic inside this function is up to you.
r_level = recursion_level - 1 # Decreas recursion level.
return redirect('search', alternate=True, recursion_level=r_level) # Redirecting using view name, you can use others
# forms of redirection see link below for visit
# the Djando redirect API doc.
else:
return_data = {}
if alternate:
# You can use this flag in order to reflect
# to the user you have performed an alternate search.
# Example:
return_data["alternate"] = True
# Build your return data.
# and render.
#return render_to_template()
Django重定向文档:redirect