2012-03-23 31 views
10

我有一個需要抓取的對象的ID列表,然後我必須按照它們的時間戳對它們進行排序。以下是我打算做它:Django:從ID列表中抓取一組對象(並按時間戳排序)

For i in object_ids: 
    instance = Model.objects.get(id = i) 
    # Append instance to list of instances 

#sort the instances list 

但也有困擾我兩件事情:

  • 難道就沒有辦法通過自己的ID列表搶項的集合 - 無需循環?
  • 我可以將任意對象僅基於它們的ID追加到QuerySet嗎?

感謝,

回答

18

這可以使用這樣的代碼來完成:

objects = Model.objects.filter(id__in=object_ids).order_by('-timestamp') 

order_by可正可負timestamp,這取決於你想要的排序。

+4

獲取與object_ids列表相同順序返回的對象的最好方法是什麼? OP代碼? – Chris 2015-09-26 21:30:49

+2

我可能只用一次調用(如上面)從數據庫中獲取數據,然後在代碼中進行排序。應該更快地查詢數據庫N次。特別是對於一個大的N. – kender 2015-09-28 08:28:52

+0

@kender @Chris我們是否有任何解決方案,以'與object_ids列表相同的順序',而不是在提取後排序? – Dipak 2016-03-03 05:10:57

8

嘗試以下操作:

result = Model.objects.filter(id__in=object_ids) 

這將返回所有Model對象有其idobject_ids給定的名單。這樣,您也不需要將其他模型附加到生成的QuerySet中。

相關問題