我知道如何在 Django 中构建过滤器和 Q 对象,但我不知道如何否定 API 提供的运算符,例如对于 contains 运算符,我想要类似 notcontains 的东西。
例如
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 查询否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194901/