Manager.in_bulkはただの辞書を返すので、特定の順序を持つようにそれを強制する方法はありませんされています。あなたが望むすべてがID順IDのリストを、一致するオブジェクトのリストである場合
、その後、次の操作を行います。
id_list = [1, 2, 3, 10, 11, 12]
results = MyModel.objects.filter(id__in=id_list).order_by('id')
それは.in_bulk()
ほど効率的ではないかもしれないが、それは照会よりも多くの方が良いでしょう一つずつ。
非常に具体的な注文が必要な場合は - 「Redisが返す順序で」 - それを行うためのデータベース自体を取得する方法はありません。その性質上、リレーショナル・データベースは、順序付けを適用しない限り、順序付けられていない行セットを戻しますが、その順序付けはデータベースのフィールドに基づいている必要があります。
その時点での最善の策は、それから、IDをキーと、オブジェクトの辞書を取得するために.in_bulk()
を使用して、あなたが必要とするために、リストを構築するためにその辞書に検索を行うことです。
編集:結果を並べ替える場合は、要求されたIDの一部がデータベースから返されなかった可能性があることを控えてください。 results.get(id、None)を使用すると、辞書に安全にインデックスを付けることができ、filter()を使用して空の項目をリストから削除することができます。
id_list = [10, 11, 12, 1, 2, 3]
# Get all of the items from the database
results = MyModel.objects.in_bulk(id_list)
# re-order the results into the order specified by id_list
ordered_results = [results.get(id,None) for id in id_list]
# remove None items from the ordered results
filtered_results = filter(None, ordered_results)
IDで番号順に並べ替えしますか?または、あなたが保存したい特定の順序がありますか? –
私はそれらをリストの順にしたい。私の質問を振り返ってみると、それは明白ではありませんでした。編集されました。 – Joe