2016-06-19 2 views
0

여러 개의 값이있는 체크 박스가 있습니다. 예 : hobbies. 사용자가 hobbies을 선택하면 그는 명의 취미가있는 사람을보고 싶어합니다. 나는 명확을 위해 세부로 이동 해달라고장고 : 배열의 모든 값을 쿼리하는 방법?

그래서 여기에 내가 모든 검사 값을 읽어 내 "큰"쿼리에 넣어 당신은 어떻게 생각 수 있으므로입니다 : q :

hobbies2 = [int(l) for l in g.getlist('hobbies2')] 
if len(hobbies2): 
    q = q & Q(personne__hobbies2__in=hobbies2) 

문제는 공통적으로 취미가있는 모든 사람을 반환한다는 것입니다 (예 : "or", 예 : "and").

and으로 많은 값을 얻으려면 어떻게해야하나요?

답변

1

__in 연산자는 집합으로 필터링합니다. 다 대다 관계에서 한 번에 여러 값을 검사하기위한 것이 아닙니다.

그것은 말 그대로 SQL에서 다음에 번역 :

SELECT ... WHERE hobbies IN (1, 3, 4); 

그래서 사용 및 조건 쿼리를 구축하는 데 필요한 것입니다. 연속 필터를 사용하면 다음과 같이 할 수 있습니다.

queryset = Personne.objects.all() 

# build up the queryset with multiple filters 
for hobby in hobbies2: 
    queryset = queryset.filter(hobbies2=hobby) 
+0

취미가 여러 개인 경우 'personne__hobbies2 = hobby'는 사람을 제외하지 않습니까? 예를 들어 : kayak = 1, ski = 2. 이것은'personne__hobbies2 = 1' 다음에'personne__hobbies2 = 1'을 먼저 필터링합니다. 그게 효과가있을 것이라고 확신합니까? –

+0

연속 Q 개체가 작동하지 않습니다. 나는 # 1 해결책을 여기에서 시도했다 : http://stackoverflow.com/questions/8618068/django-filter-queryset-in-for-every-item-in-list 그것은 나던 너무 일한다. –

+0

링크를 제공해 주셔서 감사합니다. Q 쿼리를 제거하기 위해 답변을 업데이트했습니다. 그러나 연속 필터는 링크에서 보여지기 때문에 작동해야합니다. – Soviut

관련 문제