我想避免在循环内使用查询集 因为对数据库的影响很大 我必须列出
Degreyid: [1, 3, 2, 3]
companyid: [2, 2, 2, 1]
我想结合使用过滤: -我希望对象的过滤器具有 Degreyid:1 和 companyid:2 ,第二测试应为 Degreyid:3 和 companyid:2 ............Degreyid:3 和 companyid:1 .
我不想使用这样的循环:
i=0
list=[]
while i < len(listilam):
ddegrycomp = DegreyCompany.objects.filter(withdegrey=Degreyid[i], company=companyid[i])
i+=1
有什么方法可以并行使用两个列表的过滤器吗??
注意:
使用: .filter(withdegrey__in=Degreyid, company__in=companyid)
这里没有帮助
最佳答案
您可以使用以下方式检索元素:
from django.db.models import Q
q_filter = Q(
*[Q(withdegrey=x, company=y)
for x, y in zip(Degreyid, companyid)],
_connector=Q.OR
)
items = DegreyCompany.objects.filter(q_filter)
这里我们构造一个Q
对象。这是一个过滤器表达式,但我们不使用循环进行查询。然后,我们在一个单个查询中检索元素。
关于django - 如何在此处使用 filter() 查询集而不使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64508652/