在Django ORM中列出交集如何?

时间:2016-01-11 18:26:22

标签: python django django-models django-orm

比方说,我有两个表:all_my_friends_ids和my_facebook_friends_ids,代表我的朋友在数据库中的两个列表:

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中有条目,如果没有 - 返回不在all_my_friends_ids列表中的id元素(稍后在all_my_friends_ids中添加它们)。

如何使用QuerySet在Django ORM中解决此任务?我试图提取id并将这个函数应用于它们:

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

但这似乎不正确,特别是对我来说。

1 个答案:

答案 0 :(得分: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()))