我知道如何在django中构建过滤器和Q对象,但我不知道如何否定API提供的运算符,例如,对于我想要notcontains的contains运算符。

例如

q=Q(name__notcontains="SomeString")

这将使我获得所有名称不包含“SomeString”的对象。

我缺少一些语法吗?

谢谢。

最佳答案

您可以使用 exclude() 代替filter():

Entry.objects.exclude(name__contains="SomeString")

(“给我所有条目,但那些带有names且包含“SomeString”的条目除外)

并且当处理Q对象时,可以在Q对象之前使用“〜”符号来表示否定。例如,以下语句的意思是“给我所有names包含“Elephant”但不包含“SomeString”的条目:
Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

在某些情况下,您可能要同时使用两种方法:
Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

(“给我所有条目,但names包含“Elephant”但不包含“SomeString”的条目除外))

关于django - Django查询否定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2194901/

10-10 20:27