2012-03-23 13 views
10

私は取得する必要があるオブジェクトのIDリストを持っています。その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に基づいてクエリセットに任意のオブジェクトを追加できますか?

おかげで、

答えて

18

これは、このようなコードを使用して行うことができます。

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

order_byは、あなたがそれをソートする方法によっては、timestamp正または負とすることができます。

+4

object_idsリストと同じ順序で返されたオブジェクトを取得する最も良い方法は何ですか? OPコード? – Chris

+2

私はおそらく上記のような1回の呼び出しでデータベースからデータを取り出して、あなたのコードで並べ替えを行います。より速く、データベースをN回照会する必要があります。特に大きいN. – kender

+0

@kender @Chrisフェッチ後にソートするのではなく、 'object_ids list'と同じ順序で解決する方法がありますか? – Dipak

8

次のことを試してみてください。

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

これはobject_idsの特定のリストに自分のidを持っているすべてのModelオブジェクトを返します。このように、追加のモデルを結果のQuerySetに追加する必要もありません。

関連する問題