django - 如何在此处使用 filter() 查询集而不使用循环

标签 django list loops filter django-queryset

我想避免在循环内使用查询集 因为对数据库的影响很大 我必须列出

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

我想结合使用过滤: -我希望对象的过滤器具有 Degreyid:1companyid:2 ,第二测试应为 Degreyid:3companyid:2 ............Degreyid:3companyid: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/

相关文章:

python - 组合 for 和 if 循环

javascript - 如何用先前计算的变量替换变量的值

django-reversion 及相关模型

django - 类型错误异常 : argument must be int or float on a view argument inside a template

python - Django 管理面板中显示的数据不正确

javascript - 为每个步骤应用按钮,或延迟 javascript 递归

django - 在 Django 中使用嵌套的 @transaction.commit_on_success

python - 在Python中的递归coi函数中返回一个列表

c++ - 指向常量引用 C++ 的常量指针

python - 在 Python 中的一组许多 "range"对象中搜索值的最快方法是什么