我有一个要与查询集进行比较的查询集。
说我有这样的查询集:
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的完全匹配项:它适用于小数据,但是当数据增长时,匹配停止。
我将set用于匹配:if set(x) == set(i)
循环
,但是当数据变大时它不起作用。有没有更好的方法可以做到这一点?
答案 0 :(得分:0)
我不知道我是否很好地理解了您的问题,但是比较这两个列表的一种方法是使用类似的方法:
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_response
个ID的列表:
i = Thing.objects.filter(
thing_response__isnull=False
).values_list('thing_response__id', flat=True)
注1:如果确定每个查询中只有一项(即Thing.objects.get
),则可以摆脱异常处理部分。
注2:thing_response__isnull=False
将排除与thing_response
没有任何关系的项目。
最后比较这两个列表:
if set(x) == set(i):
print('Given lists are equal')