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

新手上路,请多包涵

In Django model QuerySets, I see that there is a __gt and __lt for comparative values, but is there a __ne or != ( 不等于)?我想使用不等于过滤掉。例如,对于

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)

原文由 MikeN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

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

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

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

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

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

原文由 Dave Vogt 发布,翻译遵循 CC BY-SA 4.0 许可协议

您的查询似乎有双重否定,您想排除 x 不是 5 的所有行,所以换句话说,您想要包括 x 不是 5 的所有行。我相信这将成功:

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

要回答您的特定问题,没有“不等于” 字段查找,但这可能是因为 Django 同时具有 filterexclude 可用的方法,因此您始终可以将逻辑切换到得到想要的结果。

原文由 d4nt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题