2014-06-24 2 views
0

필자는 기능 중 하나로 필터가있는 장고 앱을 가지고 있습니다.쿼리 문자열의 여러 매개 변수로 필터링

$('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) 

그것은 경우에만 작동 다음과 같이

필터 값

는 Ajax를 사용하여 장고 백엔드로 전송 체크 박스에서 결정된다 하나의 category이 매개 변수로 전송됩니다. 그러나 여러 번 보내면 결과가 없습니다.

예 :

filter?category=Dairy가 해당 범주와 연관된 제품을 반환합니다. 그러나 filter?category=Dairy,Plastics 또는 filter?category=DairyPlastics (위에서 언급 한 Javascript 스 니펫의 결과 임)은 결과를 반환하지 않습니다.

나는 category을 다음과 같이보기에 괄호 안에 넣으려고했지만 그 역시 도움이되지 않습니다. 결과를 반환하려면 어떻게해야합니까?

답변

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를 위해 일하는 것이은/카테고리

의 목록이야
관련 문제