我需要编写过滤器来检查如下情况:
如果有名为“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
对象的更详细的描述。简而言之,它允许您执行更复杂的查询,例如 AND
、OR
查询。
对于您的具体问题,您可以这样做:
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/