True to their name (or rather the latter half of their name), QuerySets support a lot of (mathematical) set operations. For the sake of illustration, consider two QuerySets that contain the user objects:
>>> q1 = User.objects.filter(username__in=["a", "b", "c"]) [<User: a>, <User: b>, <User: c>] >>> q2 = User.objects.filter(username__in=["c", "d"]) [<User: c>, <User: d>]
Some set operations that you can perform on them are as follows:
- Union: This combines and removes duplicates. Use q1 | q2 to get [<User: a>, <User: b>, <User: c>, <User: d>].
- Intersection: This finds common items. Use q1 and q2 to get [<User: c>].
- Difference: This removes elements in the second set from the first. There is no logical operator ...