【问题标题】:how to use filter() queryset without use loop here如何在不使用循环的情况下使用 filter() 查询集
【发布时间】:2021-02-07 00:42:13
【问题描述】:

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

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) 不要在这里帮忙

【问题讨论】:

    标签: django list loops filter django-queryset


    【解决方案1】:

    您可以通过以下方式检索元素:

    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 对象。这是一个过滤器表达式,但我们用循环not查询。然后我们在一个 single 查询中检索元素。

    【讨论】:

    • 我在使用你的查询集时遇到错误请看图片
    • @SalimFh:列表理解结束后缺少逗号,已修复。
    • 它的工作和解决问题.. 非常感谢您的帮助,我将尝试研究 Q 这个外观解决了查找中的很多问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2019-08-10
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多