Django中类似于SQL中not in的等价语句

100
我有一个非常简单的查询:select * from tbl1 where title not in('asdasd', 'asdasd')
我该如何将其翻译成Django?这就像我想要相反的操作:Table.objects.filter(title__in=myListOfTitles)
4个回答

196

尝试使用exclude

Table.objects.exclude(title__in=myListOfTitles)

17
这不能用于相关的字段。取反(negating)与不在(not in)是不同的。例如,Publisher.objects.filter(book__author__in=XXX) - Alex Rothberg
也许你应该一步一步地来。这里是我的一个应用程序的代码行:User.objects.exclude(id__in=Group.objects.get(id=kwargs['group_id']).user_ids.all()),它返回所有不在具有 group_id 作为 ID 的组中的用户。 - lbris
3
请注意,排除地点时要在条件之间使用“或”。 - Voilin

35

(此帖已经过时,但仍可通过谷歌搜索到)

您可以使用 models.Q 并如下所示使用“~”:

Table.objects.filter(~Q(title__in=myListOfTitles))

当您有多个条件时,此方法特别有用。


28
Table.objects.exclude(title__in=myListOfTitles)

3

Django提供了两个选项。

exclude(<condition>)
filter(~Q(<condition>))

使用Q()方法的第二种方法
>>> from django.db.models import Q
>>> queryset = User.objects.filter(~Q(id__lt=5))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接