在 Django 模型查询集中,我看到比较值有__gtand __lt,但有__neor !=(不等于)吗?我想使用不等于来过滤。例如,对于
__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)
您可以使用Q 对象来实现这一点。它们可以用运算符取反~,并像普通 Python 表达式一样组合:
~
from myapp.models import Entry from django.db.models import Q Entry.objects.filter(~Q(id=3))
3将返回除ID 为以下内容的条目之外的所有条目:
3
[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]
在 Django 中,您可以使用exclude方法根据条件筛选出对象。但是,对于“不等于”过滤器,您可以使用__ne查找exclude,但这不是最直接的方法。
exclude
对于您的具体情况,如果您想要排除和a等于的结果,您可以直接这样做:True``x``5
a
True``x``5
results = Model.objects.exclude(a=True, x=5)
这将排除所有为a和True的x记录5。
True
x
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)) `