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

2024-05-17 00:51:38 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在构造之后修改Django Q()对象?我创建一个Q()对象,如下所示:

q = Q(foo=1)

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

^{2}$

是吗?在我能找到的Django docs中没有提到这样一个接口。在

我在找的东西是:

Q.append_clause(bar=2)

Tags: 对象djangodocsfoobarclauseappend
2条回答

您只需创建另一个Q()对象,然后将它们组合在一起: q2 = q & Q(bar=2)

{cdq>你可以使用它们的方法一起添加它们的对象。例如:

>>> 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对象在子句上执行立即数和操作,并且对于多值关系没有{}的特殊行为。在

在任何情况下,没有什么比查看SQL并确保它在您的特定查询中真的执行相同的操作更棒的了。在

相关问题 更多 >