你好我在django工作如何使用Django文档站点的搜索表单。以下是一些信息。 现在,有没有办法可以为标题制作零件搜索?例如,如果我想搜索一本名为“Apress”的书,但是我没有输入整个单词而只是写了“ap”来获得Apress。有没有办法如何实现这个解决方案?
from django.db.models import Q
from django.shortcuts import render_to_response
from models import Book
#views.py
def search(request):
query = request.GET.get('q', '')
if query:
qset = (
Q(title__icontains=query) |
Q(authors__first_name__icontains=query) |
Q(authors__last_name__icontains=query)
)
results = Book.objects.filter(qset).distinct()
else:
results = []
return render_to_response("books/search.html", {
"results": results,
"query": query
})
#search html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>Search{% if query %} Results{% endif %}</title>
</head>
<body>
<h1>Search</h1>
<form action="." method="GET">
<label for="q">Search: </label>
<input type="text" name="q" value="{{ query|escape }}">
<input type="submit" value="Search">
</form>
{% if query %}
<h2>Results for "{{ query|escape }}":</h2>
{% if results %}
<ul>
{% for book in results %}
<li>{{ book|escape }}</l1>
{% endfor %}
</ul>
{% else %}
<p>No books found</p>
{% endif %}
{% endif %}
</body>
</html>
答案 0 :(得分:1)
如果您想在字段的开头匹配,可以使用startswith
或istartswith
,如果您希望它区分大小写。您现在使用的icontains
即使在字符串中也允许匹配,即。 'arry'将匹配'Harry'。虽然startswith
允许'Har'匹配'Harry',但不允许'ArHarHar'