按类别列表搜索-Django



我有简单的搜索应用程序我如何按类别搜索使用<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>

我想您希望能够基于类别过滤结果。我建议您在模板中添加类别选择下拉。这将需要您将类别对象发送到模板中,因此可以渲染

<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) 

最新更新