在django中的排除查询中有以下区别

时间:2017-12-29 04:20:49

标签: django

任何人都可以帮助我区分这两个排除查询 考虑一下我有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条件不起作用。

2 个答案:

答案 0 :(得分:0)

请注意

  

Q对象可以使用&组合。和|

不是and操作。 and Q Boolean将无法正常工作。它会将操作数转换为Q。因此,这两个查询的实际结果可能会有所不同,因为一个条件将转换为布尔值。

但是在查询2中filter是不必要的,因为默认情况下excludeand的所有参数都与Q语句相结合。 如果or中需要notexclude,则只需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))