如何在此处不使用循环的情况下使用 filter() 查询集
how to use filter() queryset without use loop here
我想避免在循环中使用查询集
因为经常访问数据库
我必须列出
Degreyid: [1, 3, 2, 3]
companyid: [2, 2, 2, 1]
我想结合使用过滤:
-我希望对象过滤器具有 Degreyid:1 和 companyid: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 查询。然后我们因此在一个单个查询中检索元素。
我想避免在循环中使用查询集 因为经常访问数据库 我必须列出
Degreyid: [1, 3, 2, 3]
companyid: [2, 2, 2, 1]
我想结合使用过滤: -我希望对象过滤器具有 Degreyid:1 和 companyid: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 查询。然后我们因此在一个单个查询中检索元素。