我有三個模型在我正在創建的網站上顯示某種活動。歌曲,投票和評論。他們都有一個共同的列when
,它顯示了創建記錄的時間。在一個數據集中混合並排序3個模型
我想根據所有三種模型顯示活動列表。總之我想把它們放在一起,按when
排序,並且刮掉前10條記錄。
如何我這樣做是問題。我知道我可以爲每個模型獲得10個recod,將它們放在字典中並按日期排序(當然,一旦我知道如何按Python中的日期排序),但這看起來效率很低。
我有三個模型在我正在創建的網站上顯示某種活動。歌曲,投票和評論。他們都有一個共同的列when
,它顯示了創建記錄的時間。在一個數據集中混合並排序3個模型
我想根據所有三種模型顯示活動列表。總之我想把它們放在一起,按when
排序,並且刮掉前10條記錄。
如何我這樣做是問題。我知道我可以爲每個模型獲得10個recod,將它們放在字典中並按日期排序(當然,一旦我知道如何按Python中的日期排序),但這看起來效率很低。
儘管進入重新工作模式可能爲時已晚,但有一種可能性是將常用功能提取到父類中。這樣,您可以簡單地從父模型運行查詢。
這可能是這樣做的方式。實際上這並不是那麼低效 - 排序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]
它仍然必須從數據庫中取出20個完整的記錄到django中,而不是純數據庫版本,但是,這並不像我想的那樣骯髒(代碼明智)。我會給它一個鏡頭,讓你知道我如何繼續。 – Oli 2009-10-02 12:00:12