How do i not equal a queryset in django queryset filtering?
In Django model QuerySets, I see that there is a __gt
and __lt
for comparative values, but is there a __ne
or !=
( not equals )? I want to filter out using a not equals. For example, for
Model:
bool a;
int x;
I want to do
results = Model.objects.exclude(a=True, x!=5)
The !=
is not correct syntax. I also tried __ne
.
I ended up using them
results = Model.objects.exclude(a=True, x__lt=5).exclude(a=True, x__gt=5)
Best Answer
You can use Q objects for this. They can be negated with the ~
operator and combined much like normal Python expressions.
from myapp.models import Entry
from django.db.models import Q
Entry.objects.filter(~Q(id=3))
will return all entries except the one(s) with 3
as their ID.
[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]