2016-01-11 65 views
0

比方說,我有兩個表:all_my_friends_ids和my_facebook_friends_ids代表數據庫中的我的朋友兩個列表:Django ORM中的列表交集如何?

all_my_friends_ids = self.user.follows.values_list('pk', flat=True) 

(如all_my_friends_ids = [1,4,9,16,18,20,24,70 ])

my_facebook_friends_ids = User.objects.filter(facebook_uid__in=my_facebook_friends_uids) 

(例如my_facebook_friends_ids = [4,16,28,44,39])

我想檢查的my_facebook_friends_ids列表中的所有元件在all_my_friends_ids條目或沒有,如果不是 - 返回不在中的id元素all_my_friends_ids列表(並稍後將其添加到all_my_friends_ids中)。

如何在Django ORM中用QuerySet解決這個任務?我試圖提取ID和該功能適用​​於他們:

def sublistExists(list1, list2): 
     return ''.join(map(str, list2)) in ''.join(map(str, list1)) 

,但它似乎不正確的方式,尤其是對我的情況。

回答

0
facebook_exclusives = (User.objects 
         .filter(facebook_uid__in=my_facebook_friends_uids) 
         .exclude(facebook_uid__in=all_my_friends_ids)) 

如果你願意,你可以將其徹底卸載到你的數據庫,而無需創建Python中的(潛在的巨大)中間列表:

facebook_exclusives = (User.objects 
         .filter(facebook_uid__in=my_facebook_friends_uids) 
         .exclude(facebook_uid__in=self.user.follows.all())) 
+0

我嘗試這樣做還可以,但我需要一個解決方案Django ORM方式。可能嗎? – paus