是否可以在构造后修改Django Q()对象?

时间:2014-09-03 14:13:14

标签: python django django-orm django-q

构建后是否可以修改Django Q()对象?我像这样创建一个Q()对象:

q = Q(foo=1)

以后可以将q更改为与我构建的相同:

q2 = Q(foo=1, bar=2)

?我在Django docs找不到这样的界面。

我正在寻找类似的东西:

Q.append_clause(bar=2)

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并确保它在您的特定查询中做同样的事情。