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')