html - 需要帮助创建搜索视图以及如何在我创建的 DB 的 HTML 页面中应用 - Django
问题描述
我正在与 DJANGO 建立一个网站,人们在其中放置单词和联想如何记住单词。我构建了插入单词的部分。
我现在陷入了实现单词搜索和从数据库中提取信息的部分。
def Search_word(request):
if request.method == "POST":
search = request.POST["search"]
word = Words.objects.filter(English_word__contains = search)
return render(request,"search_page.html",{word:word , search:search})
else:
return render(request,"search_page.html",{})
{% if search %}
<h1> You searched for {{search}}</h1>
{% for Words in search %}
{{Words.English_word}}
{{ Words.Hebrew_word }}
{{ Words.How_To_Remember}}
{% endfor %}
{% else %}
<h1> Hey! You Forgot To Search </h1>
{% endif %}
解决方案
如果你只想在一个字段中搜索,Django 支持搜索,它比 contains 更好更准确
words = Words.objects.filter(English_word__search = search_term)
但如果你想拥有某种类似搜索引擎的功能,你可以将PostgreSQL与Django 的全文搜索功能一起使用
在model.py添加这些命令
from django.contrib.postgres.search import SearchVector
在您的模型管理器中:
def full_search(self, search_term):
return self.annotate(
search=SearchVector('English_word') +
SearchVector('blog__tagline')).filter(search=seach_term)
此方法将删除 <in/at/is/the/...> 其他英文单词,并且仅使用单词到向量算法进行搜索
如果您必须对搜索结果进行排名:
from django.contrib.postgres.search import SearchQuery, SearchRank,SearchVector
vector = SearchVector('english_word')
query = SearchQuery(search_term)
Word.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')
这将根据搜索词的可能性对结果进行注释。
顺便说一句,使用模型管理器并避免在视图中执行 ORM 是最佳实践。
关于搜索的 Django 文档: https ://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/
推荐阅读
- javascript - 在 DT 中隐藏子表列
- c# - 硬编码还是抽象视图?
- sql - 在传输中编辑 SQL 请求
- webdeploy - 使用 Web 部署部署 ASP.NET MVC5 应用程序时定位 CLI 错误日志失败
- c++ - C++ 升压日志格式器
- jmeter - 将父事务控制器的名称添加到 jmeter 结果的每一行中
- esper - com.espertech.esper.schedule.ScheduleSlot 在 5.5.0 版本中
- python - PySpark Pipeline.fit(df) 方法给出 PicklingError: Could not serialize object: ValueError: substring not found while using Elephas
- excel - 如果单元格更改,清除内容离开公式
- sql - 有没有办法在没有联合的情况下组合列?