【问题标题】:List intersection in Django ORM how to?在 Django ORM 中列出交集如何?
【发布时间】:2016-01-11 18:26:22
【问题描述】:

假设我有两个表: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 中)。

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

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

但这似乎不是正确的方法,尤其是对我而言。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:
    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()))
    

    【讨论】:

    • 我也试过这个,但我需要 Django ORM 方式的解决方案。有可能吗?
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多