开发者社区> 问答> 正文

如何使用任意数量的OR子句构成Django查询?

我正在将Django 2.0与Python 3.7结合使用。我想编写一个查询,如果字段包含数组中的至少一个字符串,则返回结果,因此我想设置一个OR查询。我已经试过了

class CoopManager(models.Manager):
    ...
    # Meant to look up coops case-insensitively by part of a type
    def contains_type(self, types_arr):
        queryset = Coop.objects.all()
        for type in types_arr:
            queryset = queryset.filter(type__name__icontains=type)
        print(queryset.query)
        return queryset

但是,这会产生一个查询,将子句与在一起。我如何执行上述操作,但将所有子句都用OR(而不是AND)连接?

我正在使用MySql 5.7,但是我想知道一个独立于数据库的解决方案,如果存在的话。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 17:18:24 502 0
1 条回答
写回答
取消 提交回答
  • 您可以创建一个Q对象来构造此析取关系:

    from django.db.models import Q
    
    filter = Q(
        \*('type__name__icontains', type) for type in types_arr],
        \*_connector=Q.OR\*
    )
    queryset = Coop.objects.filter(filter)
    

    这里的filter是一个Q对象,是所有type_name__icontains = type过滤器的析取。

    回答来源:stackoverflow

    2020-03-23 17:18:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载