我有一个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,Plastics
或filter?category=DairyPlastics
(来自上述Javascript代码段)不会返回任何结果。
我已经尝试将category
置于视图中的括号内,如下[cat]
,但这也无济于事。我应该怎么做才能让它返回结果?
答案 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类别列表