Django查询否定

Dan*_*lás 29 django negation

我知道如何在django中构建过滤器和Q对象,但我不知道如何否定API提供的运算符,例如对于包含运算符我想要的东西就像notcontains.

例如

q=Q(name__notcontains="SomeString")
Run Code Online (Sandbox Code Playgroud)

这将获得所有名称不包含"SomeString"的对象.

是否有一些我缺少的语法?

谢谢.

Lud*_*mer 62

你可以用来exclude()代替filter():

Entry.objects.exclude(name__contains="SomeString")
Run Code Online (Sandbox Code Playgroud)

("除了那些names包含"SomeString"的条目外,给我所有条目)

在处理Q对象时,可以在Q对象之前使用"〜"符号来表示否定.例如,以下语句表示"给我所有names包含"Elephant"的条目,但不包含"SomeString":

Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能希望使用这两种方法:

Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
Run Code Online (Sandbox Code Playgroud)

("给我所有条目,除了names含有"大象"的条目,但不包含"SomeString")


Han*_*Gay 5

这是QuerySet API 参考exclude似乎做你想做的。