I’ve got a Django model with two custom manager methods. Each returns a different subset of the model’s objects, based on a different property of the object.
Is there any way to get a queryset, or just a list of objects, that’s the union of the querysets returned by each manager method?
This works and looks a bit cleaner:
records = query1 | query2
If you don't want duplicates, then you will need to append
records = (query1 | query2).distinct()
Starting from version 1.11, django querysets have a builtin union method.
q = q1.union(q2) #q will contain all unique records of q1 + q2 q = q1.union(q2, all=True) #q will contain all records of q1 + q2 including duplicates q = q1.union(q2,q3) # more than 2 queryset union
See my blog post on this for more examples.