我正在用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支持的搜索比包含
更好更准确words = Words.objects.filter(English_word__search = search_term)
但是如果你想有一些类似搜索引擎的功能,你可以使用PostgreSQLwithDjango的全文搜索功能
在<<p> strong> 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)
这个方法将删除/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 Docs on search:https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/