如何在此处不使用循环的情况下使用 filter() 查询集

how to use filter() queryset without use loop here

我想避免在循环中使用查询集 因为经常访问数据库 我必须列出

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

我想结合使用过滤: -我希望对象过滤器具有 Degreyid:1companyid:2 并且二次测试应该是 Degreyid:3 and companyid:2........ Degreyid:3 and 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对象。这是一个过滤器 expression,但我们使用循环进行 not 查询。然后我们因此在一个单个查询中检索元素。