构建后是否可以修改Django Q()对象?我像这样创建一个Q()对象:
q = Q(foo=1)
以后可以将q
更改为与我构建的相同:
q2 = Q(foo=1, bar=2)
?我在Django docs找不到这样的界面。
我正在寻找类似的东西:
Q.append_clause(bar=2)
答案 0 :(得分:5)
你可以创建另一个Q()对象并将它们组合在一起:
q2 = q & Q(bar=2)
答案 1 :(得分:4)
您可以使用add
方法将Q对象添加到一起。例如:
>>> q = Q(sender=x)
>>> q.add(Q(receiver=y), Q.AND)
add
的第二个参数是连接符,也可以是Q.OR
编辑:我的回答仅仅是Perrin Harkins建议的另一种方式,但关于你的另一个问题,关于filter
的不同行为,取决于你构建查询的方式,如果你加入Q对象,你不必担心。我的例子相当于filter(sender=x, receiver=y)
,而不是filter(sender=x).filter(receiver=y)
,因为在快速测试中我可以看到Q对象在子句上立即执行AND并且没有特殊的行为filter
用于多值关系。
在任何情况下,都不像查看SQL并确保它在您的特定查询中做同样的事情。