2012-07-24 57 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