如何在Django查询集过滤中做一个不相等的?

在Django模型QuerySets中,我看到有一个和的比较值,但是有没有一个or(不等于)?我想使用不等于过滤掉。例如,对于__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)

答案 1

为此,您可以使用 Q 对象。它们可以用运算符否定,并像普通的Python表达式一样组合在一起:~

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

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

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

[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]

答案 2

您的查询似乎具有双负值,您希望排除所有不为 5 的行,因此换句话说,您希望包括 5 的所有行。我相信这将解决问题:xx

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

为了回答你的特定问题,没有“不等于”字段查找,但这可能是因为Django同时具有可用的过滤器排除方法,所以你总是可以切换逻辑以获得所需的结果。