我知道如何在django中构建过滤器和Q对象,但我不知道如何否定API提供的运算符,例如对于包含运算符,我希望使用notcontains之类的运算符.
例如
q=Q(name__notcontains="SomeString")
这将使我获得名称不包含"SomeString"的所有对象.
我有没有遗漏一些语法?
谢谢你.
我知道如何在django中构建过滤器和Q对象,但我不知道如何否定API提供的运算符,例如对于包含运算符,我希望使用notcontains之类的运算符.
例如
q=Q(name__notcontains="SomeString")
这将使我获得名称不包含"SomeString"的所有对象.
我有没有遗漏一些语法?
谢谢你.
你可以用exclude()
代替filter()
:
Entry.objects.exclude(name__contains="SomeString")
("给我所有条目,除了names
包含"SomeString"的条目)
在处理Q宾语时,可以在Q宾语前使用"~"符号来表示否定.例如,下面的语句表示"给我所有包含"Elephant"但不包含"SomeString"的names
条目:
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"的条目)