5

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

q = Q(foo=1)

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

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

? 在我能找到的Django 文档中没有提到这样的接口。

我正在寻找类似的东西:

Q.append_clause(bar=2)
4

2 回答 2

6

您可以制作另一个 Q() 对象并将它们组合在一起: q2 = q & Q(bar=2)

于 2014-09-03T14:17:37.687 回答
5

add您可以使用它们的方法将 Q 对象添加在一起。例如:

>>> q = Q(sender=x)
>>> q.add(Q(receiver=y), Q.AND)

to的第二个参数add是连接器,也可以是Q.OR

编辑:我的回答只是按照 Perrin Harkins 的建议做的另一种方式,但是关于您的其他问题,关于filter取决于您构造查询的方式的不同行为,如果您加入 Q 对象,您不必担心。我的示例等效于filter(sender=x, receiver=y),而不是filter(sender=x).filter(receiver=y),因为 Q 对象,据我在快速测试中所见,对子句执行立即 AND 并且没有filter多值关系的特殊行为。

无论如何,没有什么比查看 SQL 并确保它在您的特定查询中确实在做同样的事情更重要的了。

于 2014-09-03T14:50:52.293 回答