36๐
Both are lazily evaluated, so I would expect them to perform equivalently. The SQL is likely different, but with no real distinction.
29๐
It depends what you want to achieve. With boolean values it is easy to switch between .exclude()
and .filter()
but what about e.g. if you want to get all articles except those from March? You can write the query as
Posts.objects.exclude(date__month=3)
With .filter()
it would be (but I not sure whether this actually works):
Posts.objects.filter(date__month__in=[1,2,4,5,6,7,8,9,10,11,12])
or you would have to use a Q
object.
As the function name already suggest, .exclude()
is used to exclude datasets from the resultset. For boolean values you can easily invert this and use .filter()
instead, but for other values this can be more tricky.
- [Django]-Check if an object exists
- [Django]-How to render Django form errors not in a UL?
- [Django]-Import error django corsheaders
25๐
In general exclude is opposite of filter. In this case both examples works the same.
Here:
self.get_query_set().filter(user__isnull=False, modelField=x)
You select entries that field user is not null and modelField has value x
In this case:
self.get_query_set().filter(modelField=x).exclude(user__isnull=True)
First you select entries that modelField has value x(both user in null and user is not null), then you exclude entries that have field user null.
I think that in this case it would be better use first option, it looks more cleaner. But both work the same.
- [Django]-Django Selective Dumpdata
- [Django]-Is it better to use path() or url() in urls.py for django 2.0?
- [Django]-Unresolved attribute reference 'objects' for class '' in PyCharm