djangoのqueryset(クエリセット)は大変便利な機能でありますが、通常使用した場合idの昇順に自動でセットしてくれます。
しかしながら、自分で決めた任意の順番で並べたいことはありませんでしょうか?
本日はそんな、queryset(クエリセット)を任意の順番に並べる方法を紹介します。
コンテンツ
やりたいこと
やりたいこととしては、ソート用のIDリストを作成して、その順番にqueryset(クエリセット)も並んでもらいたいことです。
書いたコード
1 2 3 4 5 6 7 8 |
from .models import Question question_ids = ['q40', 'q30', 'q20', 'q10'] question_qs = Question.objects.filter(question_id__inquestion_ids) questions_dict = dict([(question.question_id, question) for question in question_qs]) sorted_questions = [questions_dict[id] for id in session_question_ids_list] |
1行目のquestion_idsですが、こちらが今回用意した、このID順に並んで欲しいリストです。
3行目で、Questionというモデルから、question_idsのみのIDを取得してきます。
このタイミングで、queryset(クエリセット)を生成するわけですが、question_ids順には並んでいません。
なので5.6行目で並び替えるためのコードを書いています。
5行目でquestions_dictという辞書型を用意して、6行目でquestion_ids順に並び替えます。
結果として、typeはqueryset(クエリセット)ではなくリスト型が生成されますが、クエリセットとほぼ同等のリスト型のクエリセットが生成されますので、以下のコードでクエリセットとも遜色なく使用できます。
以上。
最後に
いかがでしたでしょうか。
以上が、「【Django】queryset(クエリセット)を任意の順番にソートする」の紹介記事になります。
プログラミング学習を効率良く進めるには…
私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。
そしてネットで調べていくうちに膨大な時間が過ぎていきました。
私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。
1. いつまでもダラダラとやらないで、目標を決定して短期集中する
2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう
.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。
カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?
また以下のリンク先ではPythonを教えてくれるスクールをまとめ紹介しています。
コメントを残す