<p>在我看来,你做得不对。。。我的意思是我不明白你为什么要循环你的<code>query</code>进行过滤。据我所知,你的每一封信都在循环</p>
<p>我当时正在做,我会这样做(用我自己的例子):</p>
<pre class="lang-html prettyprint-override"><code><form action='{% url 'products:search' %}' method='get'>
<input type='text' name='q' id='search' value='' >
<select name='category' id='category'>
<option value='' selected ></option>
<option value='packet'>Packet</option>
<option value='food'>Food</option>
<option value='vegetable'>Vegetable</option>
</select>
<input type='button' value='submit' >
</form>
</code></pre>
<p>views.py:</p>
<pre class="lang-py prettyprint-override"><code>def search(request):
products = None
query = request.GET.get('q')
category = request.GET.get('category')
if query:
products = Product.objects.filter(
Q(name__icontains=query)|
Q(brand__icontains=query)
)
if category:
# since it is a choice field in the model
products |= Products.objects.filter(category=category)
context = {
'products': products,
}
return render(request, 'products/search_products.html', context)
</code></pre>
<p>在这种情况下,如果我按下submit按钮,我会得到如下url:</p>
<p><code>http://localhost:8000/products/search/?q=something&category=food</code></p>
<p>有了这些数据,我可以按名称或任何其他我想要的字段过滤产品</p>
<p>我没有看到有人会输入他们的查询,搜索结果中会有输入字段中输入任何字母的所有产品</p>