我知道如何建立过滤器和Q Django的对象,但我不知道该怎么否定了运营商的API提供,例如,用于包含运营商,我想是这样notcontains。

e.g。

q=Q(name__notcontains="SomeString")

这会得到我的所有对象,其名称不包含“SomeString”。

有一些语法我失踪?

三江源。

有帮助吗?

解决方案

您可以使用 exclude() 到位filter()的:

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

(“给我的所有条目除了那些含有names ”SomeString“)

和符合Q对象打交道时,你可以用“〜” Q对象之前的符号来表示否定。例如下面的语句的意思是“给我所有的条目包含names‘大象’,但不包含‘SomeString’:

Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

在某些情况下,你可能想使用这两种方法:

Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

(“给我的所有条目,除了那些与含有names ”象“,但不包含 ”SomeString“)

其他提示

这里的查询集API参考 exclude 似乎做你想要什么。

无论是使用exclude汉克建议,或对特定contains情况下,使用Q(name__regex = R“!(SomeString)”),如果你真的需要使用filter。被警告虽然这regex不是数据库无关的,检查什么第一个语法你的数据库的支持。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top