2014-11-30 1 views
2

의 모든 값을 포함의 검색어 역 값이 1 또는 2 또는 3 또는 4 또는 5 인 경우 객체를 선택합니다.장고 목록

AND 작업을 실행하는 쉬운 방법이 있으므로 value_list에있는 모든 요소를 ​​포함하는 모든 Category 개체를 선택하겠습니까?

예) values 같게 12345이있는 모든 Categories 선택합니다. (설명을 위해,이 ... 하나의 value1을 같게하고, 하나의 value 등등 2을 같게하고 의미)

참고 : 다음 우리는 먼저 title 객체에서 찾고, 여기에 이중 역방향 조회를 실행하는, value 개체입니다.

도움을 주시면 대단히 감사하겠습니다.

답변

2

예,이 목적을

from django.db.models import Q 

qs = Category.objects.filter(reduce(operator.and_, (Q(title__values=x) for x in value_list)) 

이 말하는 것과 같습니다 복잡한 조회에 대한 Q 개체가 (같은 일을 말하는 본질적으로 더 자세한 방법 것은) :

query = None 
for x in values_list: 
    if not query: 
     query = Q(title__values=x) 
    else: 
     query &= Q(title__values=x) 

qs = Category.objects.filter(query) 

문서에 Q objects here

+0

다른 옵션으로 나에게 엄지 손가락을 올려주세요. 그러나 와우, 장고는 정말로 여기에서 문제를 복잡하게 만든다. (비록 나를 오해하지 마라. 장고를 좋아한다!) –

+0

나는 동의한다. 그러나 자세한 코드를 무시하고, 이것은 평가가 islazy 인 것처럼 1 개의 쿼리로 평가된다 .. – karthikr

+0

@JustinBarber 실제로, 당신의 솔루션에서는, 데이터베이스에 단지 1 쿼리. – karthikr