How do I do a not equal in Django queryset filtering?
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 Entryfrom django.db.models import QEntry.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>, ...]
Your query appears to have a double negative, you want to exclude all rows where
x is not 5, so in other words you want to include all rows where
x is 5. I believe this will do the trick:
results = Model.objects.filter(x=5).exclude(a=True)
To answer your specific question, there is no "not equal to" field lookup but that's probably because Django has both
exclude methods available so you can always just switch the logic around to get the desired result.
field=value syntax in queries is a shorthand for
field__exact=value. That is to say that Django puts query operators on query fields in the identifiers. Django supports the following operators: