【Django】QuerySetを辞書型(dict)のリスト型(list)に変換する

Djangoで開発を進める上でQuerySetの有用性は言うまでもありませんが、QuerySetを取得してQuerySetを辞書型(dict)のリスト型(list)に変換して扱いたい時はありませんでしょうか?

辞書型(dict)からリスト型(list)に変換することで視認性が上がり、オブジェクトの扱いがしやすくなります。

本日はそんなQuerySetを辞書型(dict)のリスト型(list)に変換する方法を紹介します。

そもそもQuerySetとは?

そもそもQuerySetですがQuerySetはDjangoがバックエンドで作成しているQuerySet型のオブジェクトを指します。

例えばPythonで言えば、型を取得し判定するtypeメソッドを使用すると分かり易いです。

以下のように数字はint型としてprintされます。

target = 1
print(type(target)) # <class 'int'>

続いて、文字列はstr型としてprintされます。

target = "ABC"
print(type(target)) # <class 'str'>

そして、リストはlist型としてprintされます。

target = ["apple", "banana", "orange"]
print(type(target)) # <class 'list'>

では本題のQuerySetはどうでしょうか。

ここではUserというテーブルからQuerySetオブジェクトを取得してtypeメソッドで判定してみます。

queryset = User.objects.all()
print(type(queryset)) # <class 'django.db.models.query.QuerySet'>

QuerySet型が取れました。

このように、モデル名+.objects+メソッドのようにして取得できるオブジェクトがDjangoがQuerySetクラスに基づいて作ったQuerySetオブジェクトです。

QuerySetを辞書型(dict)のリスト型(list)に変換する

ではここからが本題で、取得してQuerySet型の複数オブジェクトをdict用を辞書型(dict)のリスト型(list)にしていきます。

取得したquerysetのvalue()を取得してそれを全てlist型に変換します。

queryset = User.objects.all()
user_list = list(queryset.values())
print(user_list) # [{'id': 1, 'password': 'xxxxx', 'username': 'Tom', 'email': 'tom12345@example.com'},{'id': 2, 'password': 'yyyyy', 'username': 'Alen', 'email': 'alen1224@example.com'},{'id': 3, 'password': 'zzzzz', 'username': 'Lisa', 'email': 'lisa0905@exapmle.com'},]

printで出力すると一目でわかりやすく扱いもしやすい辞書型のリストができました。

ちなみに以下が各変数を置いたときの型の確認になります。

queryset = User.objects.all()
print(type(queryset)) # <class 'django.db.models.query.QuerySet'>
user_list = list(queryset.values())
print(user_list) # <class 'list'>

ちゃんとリスト型に変換できていることが確認できました。

以上。

最後に

いかがでしたでしょうか。

以上が、「【Django】QuerySetを辞書型(dict)のリスト型(list)に変換する」の紹介記事になります。

QuerySetはPythonでは出てこないので最初は扱うことに戸惑いを感じるかもしれませんが、色々操作をしてみることで慣れていくことをお勧めします。

プログラミング学習を効率良く進めるには…

私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。

何から手をつけていいのか、わからない。

プログラミングを始めてみたけど、エラーが解決できない。

そしてネットで調べていくうちに膨大な時間が過ぎていきました。

私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。

1. いつまでもダラダラとやらないで、目標を決定して短期集中する

2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう

.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。

カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?

また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です