我想对一个queryset进行一次评估,即将对象提取到本地内存中,然后继续执行各种filter
命令。
当然,我可以:
- 退而使用列表推导和其他本地python语法,但在许多情况下,django ORM的语法更易读。
- 跳过评估基础queryset,但这样做后,由于我需要进行相当多的
filter
操作,我会受到性能影响。
那么..是否有可能在保留结果作为queryset对象的情况下强制对queryset进行评估?
我想对一个queryset进行一次评估,即将对象提取到本地内存中,然后继续执行各种filter
命令。
当然,我可以:
filter
操作,我会受到性能影响。那么..是否有可能在保留结果作为queryset对象的情况下强制对queryset进行评估?
只需要执行len(myqueryset)
。
或者只需进行条件检查即可强制进行评估。
In : list(Project.objects.values_list('owner', 'owner__email'))
Out: [(1, 'admin@example.com')]
因此,使用values_list来保留您将使用的数据。
问候。
for item in myqueryset:
pass
filter()
涉及修改基础查询,并且总是会访问数据库。
list(myqueryset)
会产生相同的效果(当然,只要您不重新绑定myqueryset
)。只是这么说... - bruno desthuilliers