我有简单的搜索应用程序
我如何按类别搜索
使用<select><option></select>
结果:
results = Adv.objects.filter(title__icontains=query).filter(cate__name__icontains=query)
这是代码:
模型
class Category(models.Model):
slug = models.SlugField(unique=True)
name = models.CharField(max_length=60)
class Adv(models.Model):
title = models.CharField(max_length=60)
pub_date = models.DateTimeField(auto_now_add=True)
namecar = models.CharField(max_length=60)
cate = models.ForeignKey(Category)
视图
def search(request):
if 'q' in request.GET:
query = request.GET['q']
results = Adv.objects.filter(title__icontains=query).filter(cate__name__icontains=query)
# print results.query
else:
query = ""
results = None
template = loader.get_template('search/search1.html')
context = Context({ 'query': query, 'results': results, 'city_list': ChoiceCity.objects.all() })
response = template.render(context)
return HttpResponse(response)
url
(r'^search1/$', 'car.search.views.search'),
模板
<form method="get" action="/search1/">
<p><label for="id_q">Search:</label>
<input type="text" name="q" id="id_q" value="{{ query }}" />
<input type="submit" value="Submit" /></p>
</form>
答案 0 :(得分:1)
我想您希望能够根据类别过滤结果。我建议在模板中添加一个类别选择下拉菜单。这将要求您将类别对象发送到模板中,因此可以呈现
<form method="get" action="/search1/">
<p><label for="id_q">Search:</label>
<input type="text" name="q" id="id_q" value="{{ query }}" />
<select name="category">
{% for category in categories %}
<option value="{{category.id}}">{{category.name}}</option>
{% endfor %}
</select>
<input type="submit" value="Submit" /></p>
</form>
def search(request):
if 'q' in request.GET:
#Get the selected category id
sel_category = request.GET.get('category', None)
#If it exists, get the category object
if sel_category:
category = get_object_or_404(Category, pk = sel_category)
query = request.GET['q']
results = Adv.objects.filter(title__icontains=query)
#If category objects exists filter the result set based on that
if category:
results =results.filter(cate__name__icontains=category.name)
# print results.query
else:
query = ""
results = None
categories = Category.objects.all()
template = loader.get_template('search/search1.html')
context = Context({ 'query': query, 'results': results, 'city_list': ChoiceCity.objects.all(), 'categories':categories })
response = template.render(context)
return HttpResponse(response)