2014-03-03 152 views
1

的號碼,我有一個名爲列表項的模式,這是我分解成其類型爲模板像這樣:Django模塊過濾器,減少查詢

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,第一個過濾器不會碰到數據庫,但最後兩個會。 – iMom0

+0

@楊揚-momo是的,我想要一個查詢將所有記錄放入list_items中,然後以另一種方式將它們過濾到另外兩個中,而不用另一個查詢。 (就像你可以在原始sql中做的那樣) – user3376753

+0

你總是可以將你的第一個過濾器的所有結果放到一個列表中,然後用['filter'函數]在Python中進行過濾(http://docs.python.org/2/庫/ functions.html#過濾器)。您可能需要在過濾器中添加一個'.select_related('list')',以便在訪問每個項目的'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)