Python 合并排序查询集-django

Python 合并排序查询集-django,python,django,list,Python,Django,List,我询问两个模型: q1 = sorted(Model1.objects.filter(name__iexact=name), key = lambda p: p.sumjournals) q2 = sorted(Model2.objects.filter(name__iexact=name), key = lambda p: p.sumbooks) sumbooks,sumjournals分别给出所有书籍和日记账的总和 伪结果是: q1 = [1, 3, 5, 8, 10] q2 = [3,

我询问两个模型:

q1 = sorted(Model1.objects.filter(name__iexact=name), key = lambda p: p.sumjournals)
q2 = sorted(Model2.objects.filter(name__iexact=name), key = lambda p: p.sumbooks)
sumbooks,sumjournals
分别给出所有书籍和日记账的总和

伪结果是:

q1 = [1, 3, 5, 8, 10]
q2 = [3, 6, 8, 11, 14]
我想要:
all=[1,3,3,5,6,8,8,10,11,14]
。数字是这里的对象

我试过了

all = []
all.extend(y for y in (q1) if y)
all.extend(y for y in (q2) if y)
但问题是,每次加载页面时,我都会得到不同的有序结果。为什么会发生这种情况?我如何才能实现我想要的

import itertools

joined = itertools.chain(q1, q2)
sorter = lambda x: x.sumbooks if has_attr(x, 'sumbooks') else x.sumjournals
all = sorted(joined, key = sorter)

有关详细信息,请参阅和文档

,因此我最好不要在第一季度和第二季度使用lambda,对吗?因为我稍后将在sorted()中进行排序?是的,很可能您不需要对
q1
q2
进行排序,我只是不确定itertools与django QuerySet的性能如何,因为它们是惰性的(如果我没有弄错的话)。不管怎样,如果懒惰的计算导致itertools出现任何问题,您可以通过
materialized\u q1=list(q1)
来具体化查询集。是的,我现在这样做了。但是每次都会给我不同的命令。。很奇怪。。有什么想法吗(这是处理此查询的最后一步吗?如果以后将其转换为字典,则排序是完全无用的,因为内置字典未排序。这是最后一步,然后我将以列表形式呈现到模板。