构建后是否可以修改 Django Q() 对象?我像这样创建一个 Q() 对象:
q = Q(foo=1)
以后是否可以更改q
为与我构建的相同:
q2 = Q(foo=1, bar=2)
? 在我能找到的Django 文档中没有提到这样的接口。
我正在寻找类似的东西:
Q.append_clause(bar=2)
构建后是否可以修改 Django Q() 对象?我像这样创建一个 Q() 对象:
q = Q(foo=1)
以后是否可以更改q
为与我构建的相同:
q2 = Q(foo=1, bar=2)
? 在我能找到的Django 文档中没有提到这样的接口。
我正在寻找类似的东西:
Q.append_clause(bar=2)
您可以制作另一个 Q() 对象并将它们组合在一起:
q2 = q & Q(bar=2)
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 并确保它在您的特定查询中确实在做同样的事情更重要的了。