小能豆

如何在 Django 查询集过滤中执行不等于操作?

javascript

在 Django 模型查询集中,我看到比较值有__gtand __lt,但有__neor !=不等于)吗?我想使用不等于来过滤。例如,对于

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)

阅读 42

收藏
2024-09-28

共2个答案

小能豆

您可以使用Q 对象来实现这一点。它们可以用运算符取反~,并像普通 Python 表达式一样组合:

from myapp.models import Entry
from django.db.models import Q

Entry.objects.filter(~Q(id=3))

3将返回除ID 为以下内容的条目之外的所有条目:

[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]
2024-09-28
小能豆

在 Django 中,您可以使用exclude方法根据条件筛选出对象。但是,对于“不等于”过滤器,您可以使用__ne查找exclude,但这不是最直接的方法。

对于您的具体情况,如果您想要排除和a等于的结果,您可以直接这样做:True``x``5

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

这将排除所有为aTruex记录5

如果您特别想排除某个值同时保持其他条件,则可以结合exclude相等性检查:

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

使用 Q 对象进行替代

如果有更复杂的条件或者想要更灵活地组合条件,可以使用Q对象:

from django.db.models import Q

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

`
2024-09-28