我需要编写过滤器来检查以下情况:
如果有名字的演员" John"而不是返回这些演员,否则搜索名为" David"的演员。
伪代码可能看起来像:
Actors.filter(name="John" or name="David")
我可以使用一个查询在Django中执行类似的操作吗?或者我必须使用if
?
actors = Actor.filter(name="John")
if not actors.exists():
actors = Actors.filter(name="David")
答案 0 :(得分:5)
您可以使用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.