在查询字符串中过滤多个参数

时间:2014-06-24 23:12:19

标签: django django-views

我有一个django应用程序,它有一个过滤器作为其中一个功能。

过滤器值由一个复选框决定,该复选框使用ajax发送到django后端,如下所示:

$('input.type-check').on('click', function(){
      var a = $(this).prop('checked');
      if(a == true){
          elem.push($(this).attr('data-role'));
      }else{
          elem.splice($(this).attr('data-role'));
      }
      var cats = '';
      $.each(elem, function(i){
          cats += elem[i];
      });
      var xurl ='/filter?category='+cats;
      $.ajax({
          type: 'GET',
          url: xurl,
          success: function(data){
              $('div.products').html(data);
          }
      })
  });

/filter$' url is mapped to the fitlered`视图:

def filtered(request):
  if 'category' in request.GET and request.GET['category']:
      cat = request.GET['category']
      ct = Product.objects.filter(category__in=cat)
      diction = {'prods': ct}
      return render(request, 'filter.html', diction)

只有一个category作为参数发送时才有效。但是,当我发送多个时,它没有给出任何结果。

例如:

filter?category=Dairy将返回与该类别相关联的产品。但是,filter?category=Dairy,Plasticsfilter?category=DairyPlastics(来自上述Javascript代码段)不会返回任何结果。

我已经尝试将category置于视图中的括号内,如下[cat],但这也无济于事。我应该怎么做才能让它返回结果?

1 个答案:

答案 0 :(得分:2)

问题是,您既没有指定分隔符来划分类别,也没有分隔视图中的类别。

试试这个:

在JQuery中,

var cats = elem.join(', ')
var xurl ='/filter?category='+cats;

在视图中:

def filtered(request):
    if request.GET.get('category'):
        cat = request.GET.get'category')
        cat_list = [c.strip() for c in cat.split(',')]
        ct = Product.objects.filter(category__in=cat_list).distinct()
        #You might need a distinct clause too, to remove duplicates

        diction = {'prods': ct}
        return render(request, 'filter.html', diction)

这适用于单个类别v / s类别列表