如何在不使用循环的情况下使用filter()queryset



我希望避免在循环中使用queryset因为它经常访问数据库我必须列出

Degreyid: [1, 3, 2, 3]
companyid: [2, 2, 2, 1]

我希望结合使用筛选:-我希望对象的筛选器具有Degreyid:1companyid:2,第二个测试应为Degreyid:3companyid:2Degreyid:3公司ID: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对象。这是一个过滤器表达式,但我们使用循环执行而不是查询。然后,我们在一个单个查询中检索元素。

最新更新