当我做类似的事情
I. objects = Model.objects.all()
然后
二。 objects.filter(field_1=some_condition)
每当在第2步中遇到各种情况时,我都会命中db。有什么办法可以让所有数据都先采取行动,然后再照顾结果呢?
最佳答案
在评估qs之前,您实际上并没有访问数据库,查询是 lazy
。
阅读更多 here
。
编辑:
重新阅读您的问题后,很明显,您在询问在针对不同条件进行过滤时如何防止数据库命中。
qs = SomeModel.objects.all()
qs1 = qs.filter(some_field='some_value')
qs2 = qs.filter(some_field='some_other_value')
通常,您希望数据库为您进行过滤。
您可以通过将qs转换为列表来对其求值。这将防止进一步的数据库命中,但是可能比让数据库返回结果更糟。
qs_l = list(qs)
qs1_l = [element for element in qs_l if element.some_field='some_value']
qs2_l = [element for element in qs_l if element.some_field='some_other_value']
关于Django ORM并命中数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5989499/