错误示例
qs1 = Work.objects.annotate(
name=F('work_name'), age1=Value(
99, output_field=IntegerField())
).values('id', 'name', 'todo', 'age1')
qs2 = User.objects.annotate(
age1=F('age'), name=F('username'), todo=F('', output_field=CharField(max_length=1))
).values('id', 'name', 'todo', 'age1')
qs = qs1.union(qs2)
会导致顺序错乱
正确
qs1 = Work.objects.annotate(
name=F('work_name'), todo1=F('todo'),age1=Value(
99, output_field=IntegerField())
).values('id', 'name', 'todo1', 'age1')
qs2 = User.objects.annotate(
name=F('username'), todo1=F('', output_field=CharField(max_length=1)), age1=F('age')
).values('id', 'name', 'todo1', 'age1')
qs = qs1.union(qs2)
方法一:需要在annotate中固定顺序
方法二:使用多个有顺序的annotate
总结
union字段顺序和类型一定需要相同,名称可以不同会一第一个为准