2014-03-03 3 views
1

의 수를 줄일 나는 그래서 템플릿에 대한 자사의 종류로 분해을 ListItem라는 모델이 있습니다장고 모델 필터는 쿼리

list_items = ListItem.objects.filter(list__user=request.user.id) 
type2list_items = list_item.filter(list__type=1) 
type3list_items = list_item.filter(list__type=2) 

이것은 내가 어떻게 할 수, 너무 많은 쿼리를 생성 끝을 그것은 단지 하나인가? 그러면 데이터베이스를 다시 치지 않고 맨 아래의 2 개의 행으로 필터링 할 수 있습니까? 감사합니다

+1

AFAIK, 첫 번째 필터는 db에 도달하지 않지만 마지막 두 개는됩니다. – iMom0

+0

@ 扬扬 -momo 예, 모든 레코드를 list_items에 넣고 다른 쿼리없이 다른 두 레코드로 필터링하는 방법을 원합니다. (원시 SQL에서 할 수있는 것처럼) – user3376753

+0

첫 번째 필터의 모든 결과를 항상 목록으로 가져온 다음 ['filter' 함수를 사용하여 파이썬으로 필터링하십시오.] (http://docs.python.org/2/ library/functions.html # filter). 각 항목의'list' 필드에 액세스 할 때 추가 쿼리를 피하기 위해'.select_related ('list')'를 필터에 추가해야 할 수도 있습니다. – lanzz

답변

0

Q objects과 같은 검색어를 사용할 수 있습니다.

from django.db.models import Q 

    list_items = ListItem.objects.filter(Q(list__type=1) | 
          Q(list__type=2)).filter(list__user=request.user.id)