Django单个对象的序列化器
我正在尝试找到一种方法,将一些Django模型对象转换成JSON格式,类似于:
j = Job.objects.get(pk=1)
##############################################
#a way to get the JSON for that j variable???
##############################################
我不想要:
from django.core import serializers
serializers.serialize('json', Job.objects.get(pk=1),ensure_ascii=False)
因为这样返回的是一个JSON数组,而不是单个对象的表示。
有没有什么好的主意?
我想到的一种方法是:找一种方式获取对象的属性和对应值的哈希,然后用simplejson来获取它的JSON表示,不过我不知道怎么获取这个哈希。
3 个回答
15
我建议你使用Django的 model_to_dict
。如果我没记错的话,serializers.serialize()
也是依赖这个方法的,不过它只适用于 list
,而不适合单个模型实例。这样你就可以从一个单独的模型中获取一个包含模型字段的 dict
实例:
from django.forms.models import model_to_dict
# assuming obj is your model instance
dict_obj = model_to_dict( obj )
现在你只需要简单地调用一次 json.dumps
:
import json
json.dumps(dict_obj)
21
方法一
使用 Django 的序列化工具,并选择 python
格式
from django.core import serializers
j = Job.objects.get(pk=1)
response = serializers.serialize('python', [j], ensure_ascii=False)
方法二
在序列化时使用 json
格式,并对字符串响应进行 loads 操作
import json
from django.core import serializers
j = Job.objects.get(pk=1)
json_str_response = serializers.serialize('json', [j], ensure_ascii=False)
response = json.loads(json_str_response)[0]
方法三
使用 Django REST Framework 的序列化类,定义一个序列化类,然后对实例进行序列化
from rest_framework import serializers
class JobSerializer(serializers.ModelSerializer):
class Meta:
model = Job
fields = '__all__'
j = Job.objects.get(pk=1)
response = JobSerializer(instance=j).data
参考资料
1. 序列化 Django 模型对象
34
你可以对从 serializers.serialize 得到的结果稍微处理一下。其实,把结果前后的方括号去掉并不难。
job = Job.objects.get(pk=1)
array_result = serializers.serialize('json', [job], ensure_ascii=False)
just_object_result = array_result[1:-1]
这个方法虽然简单,但它能让你得到的结果只是一个 JSON 格式的对象。