一个obj的Django序列化程序

2024-05-23 15:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图找出一种方法将一些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表示,但是我不知道如何获取散列。


Tags: to对象django方法模型jsonget序列化
3条回答

我建议使用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)

把你从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符号的对象。

方法-1

使用具有python格式的Django序列化程序

from django.core import serializers

j = Job.objects.get(pk=1)
response = serializers.serialize('python', [j], ensure_ascii=False)

方法2

序列化时使用json格式,并加载字符串响应

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)

方法-3

使用Django REST Framework's Serializer class 定义序列化程序类并将实例序列化为

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

参考
一。Serializer Django model object

相关问题 更多 >