Python 将查询集与查询集进行比较的最佳方法

Python 将查询集与查询集进行比较的最佳方法,python,django,orm,django-queryset,Python,Django,Orm,Django Queryset,我有一个查询集,我想与查询集进行比较 假设我有这样的疑问: x = Thing.objects.get(user=request.user).thing_response.all() 然后我有一个查询集,它可以获取每一个“东西”和相关的响应,就像这样 all = Things.objects.all() i = [x.id for x in all.thing_response.all()] 我已经用x和I构建了一个ID列表。现在我想得到x中I的精确匹配:它适用于小数据,但当数据增长时,匹配

我有一个查询集,我想与查询集进行比较

假设我有这样的疑问:

x = Thing.objects.get(user=request.user).thing_response.all()
然后我有一个查询集,它可以获取每一个“东西”和相关的响应,就像这样

all = Things.objects.all()
i = [x.id for x in all.thing_response.all()]
我已经用x和I构建了一个ID列表。现在我想得到x中I的精确匹配:它适用于小数据,但当数据增长时,匹配停止

我使用集合进行匹配:
如果设置(x)==set(I)
在循环中


但当数据变大时,它就不起作用了。有没有更好的方法来实现这一点?

我不知道我是否非常理解你的问题,但比较这两个列表的一种方法是使用以下内容:

x = []
try:
    x = Thing.objects.get(
        user=request.user
        ).thing_response.values_list('id', flat=True)
except Thing.DoesNotExist:
    pass
except Thing.MultipleObjectsReturned:
    pass
然后要检索所有
thing\u response
id的列表,请使用:

i = Thing.objects.filter(
    thing_response__isnull=False
    ).values_list('thing_response__id', flat=True)
注1:如果您确定每个查询只存在一个项(即
Thing.objects.get
),则可以去掉异常处理部分

注2:
thing\u response\u isnull=False
将排除与
thing\u response
没有任何关系的项目

最后比较这两个列表:

if set(x) == set(i):
    print('Given lists are equal')