2009-10-02 31 views
1

我有三個模型在我正在創建的網站上顯示某種活動。歌曲,投票和評論。他們都有一個共同的列when,它顯示了創建記錄的時間。在一個數據集中混合並排序3個模型

我想根據所有三種模型顯示活動列表。總之我想把它們放在一起,按when排序,並且刮掉前10條記錄。

如何我這樣做是問題。我知道我可以爲每個模型獲得10個recod,將它們放在字典中並按日期排序(當然,一旦我知道如何按Python中的日期排序),但這看起來效率很低。

回答

3

儘管進入重新工作模式可能爲時已晚,但有一種可能性是將常用功能提取到父類中。這樣,您可以簡單地從父模型運行查詢。

3

這可能是這樣做的方式。實際上這並不是那麼低效 - 排序30個項目的速度相當快,Python有一個非常好的內置排序算法。

items = list(Song.objects.order_by('when')[:10]) 
items.extend(list(Vote.objects.order_by('when')[:10])) 
items.extend(list(Comment.objects.order_by('when')[:10])) 

items.sort(key=lambda x: x.when) 

items = items[:10] 
+0

它仍然必須從數據庫中取出20個完整的記錄到django中,而不是純數據庫版本,但是,這並不像我想的那樣骯髒(代碼明智)。我會給它一個鏡頭,讓你知道我如何繼續。 – Oli 2009-10-02 12:00:12

相關問題