2024-05-17 00:51:38 发布
网友
是否可以在构造之后修改Django Q()对象?我创建一个Q()对象,如下所示:
q = Q(foo=1)
以后是否可以将q更改为与我构建的相同:
q
是吗?在我能找到的Django docs中没有提到这样一个接口。在
我在找的东西是:
Q.append_clause(bar=2)
您只需创建另一个Q()对象,然后将它们组合在一起: q2 = q & Q(bar=2)
q2 = q & Q(bar=2)
{cdq>你可以使用它们的方法一起添加它们的对象。例如:
>>> q = Q(sender=x) >>> q.add(Q(receiver=y), Q.AND)
add的第二个参数是连接器,它也可以是Q.OR
add
Q.OR
编辑:我的回答只是按照Perrin Harkins的建议采取不同的方式,但是关于您的另一个关注点,filter的不同行为取决于您构造查询的方式,如果您加入Q对象,您不必担心这一点。我的例子等价于filter(sender=x, receiver=y),而不是filter(sender=x).filter(receiver=y),因为就我在快速测试中所看到的,Q对象在子句上执行立即数和操作,并且对于多值关系没有{}的特殊行为。在
filter
filter(sender=x, receiver=y)
filter(sender=x).filter(receiver=y)
在任何情况下,没有什么比查看SQL并确保它在您的特定查询中真的执行相同的操作更棒的了。在
您只需创建另一个Q()对象,然后将它们组合在一起:
q2 = q & Q(bar=2)
{cdq>你可以使用它们的方法一起添加它们的对象。例如:
add
的第二个参数是连接器,它也可以是Q.OR
编辑:我的回答只是按照Perrin Harkins的建议采取不同的方式,但是关于您的另一个关注点,}的特殊行为。在
filter
的不同行为取决于您构造查询的方式,如果您加入Q对象,您不必担心这一点。我的例子等价于filter(sender=x, receiver=y)
,而不是filter(sender=x).filter(receiver=y)
,因为就我在快速测试中所看到的,Q对象在子句上执行立即数和操作,并且对于多值关系没有{在任何情况下,没有什么比查看SQL并确保它在您的特定查询中真的执行相同的操作更棒的了。在
相关问题 更多 >
编程相关推荐