当我做的事情
一世. objects = Model.objects.all()
然后
II. objects.filter(field_1=some_condition)
我每次在第2步都遇到各种条件时都会点击db.有没有办法在第一个操作中获取所有数据然后只是处理结果?
DTi*_*ing 13
在评估qs之前,你实际上没有点击数据库,查询是lazy.
阅读更多here.
编辑:
在重新阅读您的问题之后,很明显您在询问如何在针对不同条件进行过滤时阻止db命中.
qs = SomeModel.objects.all()
qs1 = qs.filter(some_field='some_value')
qs2 = qs.filter(some_field='some_other_value')
Run Code Online (Sandbox Code Playgroud)
通常您会希望数据库为您进行过滤.
您可以通过将qs转换为列表来强制评估qs.这可以防止进一步的db命中,但是它可能比让db返回结果更糟糕.
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']
Run Code Online (Sandbox Code Playgroud)