在Django模型QuerySets中,我看到比较值存在__gt和__lt,但是存在__ne// !=/ <>(不等于?)。
__gt
__lt
__ne// !=/ <>
我想使用不等于过滤掉:
例:
Model: bool a; int x;
我想要
results = Model.objects.exclude(a=true, x!=5)
在!=不正确的语法。我试过__ne,<>。
!=
__ne,<>
我最终使用:
results = Model.objects.exclude(a=true, x__lt=5).exclude(a=true, x__gt=5)
也许Q对象可以帮助解决此问题。我从未使用过它们,但似乎可以将它们取反并组合起来,就像普通的python表达式一样。
更新:我只是尝试了一下,它似乎工作得很好:
>>> from myapp.models import Entry >>> from django.db.models import Q >>> Entry.objects.filter(~Q(id = 3)) [<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]
你的查询似乎有一个双重否定,你想排除x不为5的所有行,换句话说,你想包括x为5的所有行。我相信这可以解决问题。
results = Model.objects.filter(x=5).exclude(a=true)
要回答你的特定问题,没有“不等于”,但这可能是因为django同时提供了“过滤器”和“排除”方法,因此你始终可以切换逻辑回合以获得所需的结果。