合并排序的查询集 - django

时间:2014-03-27 06:20:03

标签: 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, 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)

但问题是每次加载页面时我都会得到不同的有序结果。为什么会发生这种情况?我如何实现我的目标?

1 个答案:

答案 0 :(得分:2)

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)

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