【问题标题】:How do I pass a list of Qs to filter for OR lookups?如何传递 Q 列表以过滤 OR 查找?
【发布时间】:2010-10-14 10:36:07
【问题描述】:

如何传递 Q 列表以过滤 OR 查找?比如:

q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?

如果没有清单,我会这样做:

Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))

【问题讨论】:

    标签: django orm django-models lookup


    【解决方案1】:

    使用python的reduce()函数:

    import operator
    reduced_q = reduce(operator.or_, q_list)
    Model.objects.filter(reduced_q)
    

    【讨论】:

    【解决方案2】:

    Q 对象也有一个 add 方法,它接受另一个 Q 对象和一个 Q 连接器(AND 或 OR)。

    q_object = Q(xyz__isnull=True)
    q_object.add(Q(x__startswith='x'), Q.OR)
    

    我发现这在构建 OR 过滤器时很有帮助,我在我的博客上写了一个更长的示例:"Adding" Q objects in Django

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 2023-03-19
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多