如何在Django queryset过滤中做到不相等?

在Django模型的QuerySets中,我发现有一个__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))

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

你的查询似乎有一个双重否定的,你想排除其中x不是5的所有行,换句话说,你想包括所有的行,其中x是5.我相信这将做到这一点。

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

为了回答你的具体问题,没有“不等于”,但这可能是因为django同时具有“过滤器”和“排除”方法,所以你总是可以切换逻辑来获得所需的结果。


查询中的field=value语法是field__exact=value的简写。 也就是说,Django将查询运算符放在标识符的查询字段中。 Django支持以下运算符:

exact
iexact
contains
icontains
in
gt
gte
lt
lte
startswith
istartswith
endswith
iendswith
range
year
month
day
week_day
isnull
search
regex
iregex

我相信通过将这些与Q对象结合起来,就像Dave Vogt建议并使用filter()或者exclude()一样,因为Jason Baker建议您可以准确地得到所需的任何可能的查询。

链接地址: http://www.djcxy.com/p/6577.html

上一篇: How do I do a not equal in Django queryset filtering?

下一篇: How can I make nrepl