python - 带有 OR 语句的 Django 过滤器

标签 python django

我需要编写过滤器来检查如下情况:

如果有名为“John”的 Actor ,则返回这些 Actor ,否则搜索名为“David”的 Actor 。

伪代码可能如下所示:

Actors.filter(name="John" or name="David")

我可以使用一个查询在 Django 中做这样的事情吗?还是我必须使用 if

actors = Actor.filter(name="John")
if not actors.exists():
    actors = Actors.filter(name="David")

最佳答案

您可以使用Q 对象。 Django docs 提供了关于 Q 对象的更详细的描述。简而言之,它允许您执行更复杂的查询,例如 ANDOR 查询。 对于您的具体问题,您可以这样做:

Actor.objects.filter(Q(name="John") | Q(name="David"))

一般来说,这里有一些您可以使用 Q 对象做的很酷的事情。

您也可以使用Q 创建动态查询。例如:

    import operator
    try:
        from functools import reduce
    except ImportError:  # Python < 3
        pass

    q_list = [Q(question__contains='dinner'), Q(question__contains='meal')]
    Poll.objects.filter(reduce(operator.or_, q_list))

本文中的示例取自 this post.

关于python - 带有 OR 语句的 Django 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45253994/

相关文章:

python - 我应该返回一个通过引用传递并修改过的列表吗?

python - "Reset original view"不显示全貌

python - 如何从 HTML 获取 Python 数组的第一个元素

python - token 异常配置单元查询不匹配

python - pyopencl.运行时错误: clBuildProgram failed: invalid build options

python - SimpleIDML 如何将 IDML 转换为 PDF?

python - 在 Django 中是否有内置的方法来过滤给定的函数?

python - Django 的持久对象?

django - Django无法连接到gitlab ci中的postgres数据库

python - 当没有摘录时显示消息 - Django 模板