Djangoで標準Modelを使用時にQuerySetやModelオブジェクトで混乱したことはありませんか?
QuerySetやModelオブジェクトを取得した後に以下のように処理を行うケースは多々あります。
- JSON形式でAPIのレスポンスとして利用する
- ディクショナリ形式にデータ操作
この記事ではQuerySetやModelオブジェクトをそれぞれよく使うJSON形式やディクショナリ型に変換する方法を紹介します。
目次
QuerySetからJSON形式に変換
QuerySetをJSON形式に修正するにはdjango.core のdjango.core import serializersを使用します。
import json
from django.core import serializers
from .models import Post
# QuerySetを取得
post_query_set = Post.objects.all()
# JSON形式の文字列変換
post_json = serializers.serialize("json", post_query_set)
# リスト型オブジェクトに変更
json.loads(post)
よくある利用シーンとしてHTTPのレスポンスとして使用すると思います。例は以下になります。
from django.core import serializers
from django.http import HttpResponse
from .models import Post
# JSON形式の文字列変換
def posts(request):
post = serializers.serialize("json", Post.objects.all())
return HttpResponse(post_list, content_type="text/json")
ModelオブジェクトからJSON形式に変換
ModelオブジェクトをJSON形式に変更するにはmodel_to_dict でディクショナリ型に一度変換し、さらにjson.dumpsやjson.dumpでjson形式に変換します。例ではjson.dumps使用しています。
import json
from django.forms.models import model_to_dict
from .models import Post
# Modelオブジェクトを取得
post = Post.objects.get(id=2)
# ディクショナリ型に変換
post_dict = model_to_dict(post)
# 辞書型からJSON型の文字列に変換
json.dumps(post_dict)
QuerySetからディクショナリ型に変換
QuerySetからディクショナリに変換するにはQuerySetのvalues()メソッドを使用します。
values()で取得したデータをlist関数に渡せばディクショナリ型に変換できます。
import json
from .models import Post
# QuerySetを取得
post_query_set = Post.objects.all()
# valueメソッドでデータを取得してlist型に変換
post_list = list(post_query_set.values())
Modelオブジェクトからディクショナリに変換
ModelオブジェクトをJSON形式に変更するにはmodel_to_dict でディクショナリ型に一度変換します。
from django.forms.models import model_to_dict
from .models import Post
model_to_dict(Object)