2012-07-24 67 views
4

我有两个我想合并和排序的查询集。梳理并排序来自不同表格的两个查询集?

这里是我的查询:

latestbooks = Book.objects.all().order_by('-added') latestvideos = Video.objects.all().order_by('-added')

我想这些查询结合起来,之前他们传递给我的模板,这样我可以创建一个显示最新的活动列表进行排序该网站 - 无论是新图书还是新视频,都按照它们的添加顺序排列。

回答

9

您可以将它们组合并排序为列表但不作为查询集。功能,它并不重要,但请记住,不可能进一步过滤。

latestbooks = Book.objects.all().order_by('-added') 
latestvideos = Video.objects.all().order_by('-added') 

latest = list(latestbooks) + list(latestvideos) 
latest_sorted = sorted(latest, key=lambda x: x.added, reverse=True) 

UPDATE

如果你有不同的属性名称的工作,它仍然是可能的,但它开始变得难看了,这可能是不可行的不仅仅是两个变化:

sorted(latest, key=lambda x: x.added if hasattr(x, 'added') else x.desadded, reverse=True) 
+0

确实,在第二种情况下'added'是'desadded'。有没有添加两个键并将它们组合的方法?或者我应该重新命名该列以添加? – user1328021 2012-07-24 17:34:07

+0

是的,请参阅上面的更新。 – 2012-07-24 18:32:45