[Django]QuerySetとModelオブジェクトをJSONやディクショナリに変換する方法

Djangoで標準Modelを使用時にQuerySetやModelオブジェクトで混乱したことはありませんか?

QuerySetやModelオブジェクトを取得した後に以下のように処理を行うケースは多々あります。

  • JSON形式でAPIのレスポンスとして利用する
  • ディクショナリ形式にデータ操作

この記事ではQuerySetやModelオブジェクトをそれぞれよく使うJSON形式やディクショナリ型に変換する方法を紹介します。

目次

QuerySetからJSON形式に変換

QuerySetをJSON形式に修正するにはdjango.coredjango.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)
よかったらシェアしてね!
  • URLをコピーしました!
目次