2012-01-07 3 views
0

이렇게 모델을 필터링하는 쿼리는 어떻게 만듭니 까?Django 크로스 필터 검색?

내 모델은 다음과 같습니다

class test(models.Model): 
    name = models.CharField(max_length=50) 
    status = models.CharField(max_length=50) 
    other = models.CharField(max_length=50) 

나는 대신에 또는 내가 AND로 쿼리를 필터링하도록하고 싶습니다. 나는 | &에 있지만 작동하지 않습니다.

results = test.objects.filter(name=name1,status=status1,other=other1) 
:의 나는 상자 드롭 다운에서 이름 1, 상태 1 및 밸브 1을 선택하면

Filter By Name: DropDownList of Names 
Filter By Status: DropDownList of Statuses 
Filter By Other: DropDownList of Others 

그것을 표시해야 결과 : I 양식 등을하는 템플릿에 필터가있는 경우, 더 복잡하게하려면

def search(request): 
    query = request.GET.get('q', '') 
    if query: 
     qset = (
      Q(name__icontains=query) | 
      Q(status__icontains=query) | 
      Q(other__icontains=query) 
     ) 
     results = test.objects.filter(qset).distinct() 
    else: 
     results = [] 
    return render_to_response("test/search.html", { 
     "results": results, 
     "query": query 
    }) 

이 현재는 검색 이름, 상태 또는 기타 :

여기 views.py에서 내 현재 쿼리입니다. 내가 | &으로 모두 검색하지만 양식 드롭 다운 상자에서 쿼리 처리가 연결되지 않았기 때문에 결과를 표시 할 때 아무 것도 표시되지 않습니다. 그들을 연결하는 방법? 특정 필드에 대한 드롭 다운에 대한 ALL 옵션도 보유하고 있습니까?

나는이 사실을 분명히 밝히기를 희망합니다. 고맙습니다.

+0

검색어는 무엇입니까? –

+0

그리고, 어떻게'category'가 당신의 모델과 관련이 있습니까? – danihp

답변

2

django-filters 응용 프로그램을 사용하는 것이 좋습니다. 그것은 검색/필터 쿼리 형식 드롭 다운 및 제작 검색어 세트 모든 루틴을 automatize 수 있습니다

장고 필터 동적 필터의 검색어에 사용자를 허용하는 재사용 가능한 장고 응용 프로그램입니다. Python 2.4 이상이 필요합니다. 사용 및 설치 지침은 docs 디렉토리를 참조하십시오.

장고 필터는 장고 관리자의 list_filter 인터페이스와 비슷한 인터페이스를 생성하는 데 사용할 수 있습니다. Django의 ModelForms에 매우 비슷한 API가 있습니다. 예를 들어, 당신은 다음보기에 당신이 할 수있는 ::

def product_list(request): 
    filterset = ProductFilterSet(request.GET or None) 
    return render_to_response('product/product_list.html', 
     {'filterset': filterset}) 

이의 문서 디렉토리를 참조하면 코드 ::

import django_filters 

class ProductFilterSet(django_filters.FilterSet): 
    class Meta: 
     model = Product 
     fields = ['name', 'price', 'manufacturer'] 

그리고 그것을위한 filterset을 가질 수 제품 모델이 있다면 자세한 정보.

+0

고맙습니다. – Neeran