我想评估一次查询集,即将对象提取到本地内存,然后继续对获取的对象执行各种filter
命令。
当然我可以:
filter
操作。那么..是否可以强制进行查询集评估,同时将结果保存为查询集对象?
答案 0 :(得分:3)
如何做len(myqueryset)
。
或者只是进行条件检查也可以强制进行评估。
答案 1 :(得分:1)
您可以通过迭代查询集轻松强制进行评估:只要忽略迭代结果,您的对象就会保持查询集。
for item in myqueryset:
pass
但是,这并不能真正做到你想要的,因为你说你想在评估的查询集上调用更多的过滤器方法。这不起作用,因为filter()
涉及修改基础查询,并且将始终命中数据库。
我不知道为什么你认为如果你跳过评估查询集就会受到性能影响:情况正好相反,你提议的评估是不必要的步骤。
答案 2 :(得分:1)
强制设置时不能保留queryset对象。但是您可以执行以下操作:
In : list(Project.objects.values_list('owner', 'owner__email'))
Out: [(1, 'admin@example.com')]
因此,使用values_list保留要使用的数据。
问候。