任何人都可以帮助我区分这两个排除查询 考虑一下我有Model TableA
1。 TableA.objects.exclude(id__in = [1,3,4],is_active = False)
2。 TableA.objects.exclude(Q(id__in = [1,3,4])和Q(is_active = False))
我问这个是因为第二个查询给了我正确的输出但是在第一个查询中is_active条件不起作用。
答案 0 :(得分:0)
请注意
Q对象可以使用&组合。和|
不是and
操作。 and
Q
Boolean
将无法正常工作。它会将操作数转换为Q
。因此,这两个查询的实际结果可能会有所不同,因为一个条件将转换为布尔值。
但是在查询2中filter
是不必要的,因为默认情况下exclude
和and
的所有参数都与Q
语句相结合。
如果or
中需要not
或exclude
,则只需print(TableA.objects.exclude(id__in=[1,3,4], is_active=False).query)
,详情请见here。
<强> UPD 强> 您可以使用以下命令检查每个查询生成的SQL代码:
$ sudo apt-get install php7.0-dev
答案 1 :(得分:0)
如果您在exclude
中设置了多个条件,它们将与or
合并
exclude(id__in=[1,3,4], is_active=False)
等于
exclude(Q(id__in=[1,3,4]) or Q(is_active=False))