i’m trying to join together 2 QuerySets. Right now, I’m using the | operator, but doing it this way won’t function as an “append”.
My current code is:
df = RegForm((querysetA.all() | querysetB.all()).distinct())
I need the elements from querysetA to be before querysetB. Is it even possible to accomplish while keeping them just queries?
Advertisement
Answer
This can be solved by using annotate to add a custom field for ordering on the querysets, and use that in a union like this:
from django.db.models import Value
a = querysetA.annotate(custom_order=Value(1))
b = querysetB.annotate(custom_order=Value(2))
a.union(b).order_by('custom_order')
Prior to django-3.2, you need to specify the output_field for Value:
from django.db.models import IntegerField a = querysetA.annotate(custom_order=Value(1, IntegerField())) b = querysetB.annotate(custom_order=Value(2, IntegerField()))