我如何在Django中的查询集过滤中使用不等于?

21 浏览
0 Comments

我如何在Django中的查询集过滤中使用不等于?

在Django模型查询集中,我发现有一个__gt__lt用于比较值,但是否有__ne!=不等于)?我想使用不等于进行过滤。例如,对于

Model:
    bool a;
    int x;

,我想实现

results = Model.objects.exclude(a=True, x!=5)

!=不是正确的语法。我还尝试过__ne。最终,我使用了:

results = Model.objects.exclude(a=True, x__lt=5).exclude(a=True, x__gt=5)

admin 更改状态以发布 2023年5月21日
0
0 Comments

您的查询似乎有双重否定,您想要排除所有x不等于5的行,换句话说,您想要包括所有x等于5的行。我认为这样做就可以解决问题:

results = Model.objects.filter(x=5).exclude(a=True)

回答您的具体问题,没有“不等于”字段查询,但这可能是因为Django有filterexclude方法可用,所以您可以随时切换逻辑以获得所需的结果。

0
0 Comments

您可以使用Q对象来实现此功能。它们可以使用~操作符否定,并且类似于常规的Python表达式进行组合:

from myapp.models import Entry
from django.db.models import Q
Entry.objects.filter(~Q(id=3))

将返回除ID为3的条目(们)之外的所有条目:

[, , , ...]

0