2016-01-21 35 views
0

我有一個視圖,它返回與我的一個模型中隨機選擇的行相關的數據。我知道order_by('?')及其性能問題,並且我想避免在我的視圖中使用order_by('?')。在Django中快速選擇一個隨機行

因爲我的模型中的數據很少改變(如果有的話),我正在考慮在請求之間將整個模型緩存在內存中的方法。我知道我正在處理多少條記錄,並且我很樂意記住這個記憶。如果模型確實發生了變化,那麼我可以在那個時候重新生成緩存。

我的策略是否合理?如果是這樣,我該如何執行它?如果不是,我怎樣才能從模型中快速選擇一個隨機的行,而這個行很少改變?

回答

0

如果你知道你的對象的ID,它的範圍可以隨機在IDS,然後查詢數據庫

0

一個更好的辦法是保持在緩存中的對象的和只需在需要時隨機取出一個:

item_number = random.randint(MODEL_COUNT) 
MyModel.objects.all()[item_number] 
+0

我該如何實際實現緩存?一個全局變量?什麼是這樣的Django模式? – brewbuck