2014-12-07 2 views
0

인덱스에 특정 공급자에 대한 전문 목록이 포함 된 MultiValueField가 있습니다. 내 검색에서 사용자가 선택한 전문 분야와 적어도 하나의 전문 분야가 일치하지 않는 제공자를 필터링하여 필터링 할 전문 분야를 선택할 수있게하려고합니다. 본질적으로 나는 선택된 필터로 전문 분야에 중첩 된 모든 제공자를 원합니다. 예를 들어 쿼리 집합 필터가 목록에서 중복되는 경우

경우 :

귀도 파이썬, C와 유닉스

전문

제임스는 자바, 유닉스, 그리고 컴파일러

빌은 전문 Windows 및 C

전문 그리고 필터를 선택 파이썬과 윈도우즈, 나는 귀도와 빌을보고 싶다. 필터 C 및 컴파일러를 선택하면 Guido, James 및 Bill을보고 싶습니다. 등 등

가 여기 내 search_indexes.py

class ProviderIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    specialties = indexes.MultiValueField(model_attr='specialties_as_list') 

입니다 그리고 내 양식이 전문의 필드로

specialities = forms.MultipleChoiceField(widget=CheckboxSelectMultiple(), choices=Provider.SPECIALTY_CHOICES) 

있습니다.

편집 건초 더미에 익숙하지 사람들을위한

, 당신은 여전히 ​​도움이 될 수 있도록 쿼리, 기본적으로 장고 ORM 같은 일! MultiValueField는 인덱스에 json 배열의 문자열로 저장됩니다. 기본적으로 우리의 목적을 위해 파이썬리스트입니다. 두리스트 사이에 교차가 있는지 확인하기 위해 쿼리 세트를 작성하는 방법이 있습니까?

답변

0

단순한 'in'필터가 작업을 수행했습니다 ... 너무 오랫동안 나를 저주했습니다.

sqs = sqs.filter(specialties__in=self.cleaned_data['specialties'])

관련 문제