用于一个对象的Django序列化程序

khe*_*lll 19 python django json

我试图想出一种方法将一些Django模型对象序列化为JSON格式,如:

j = Job.objects.get(pk=1)
##############################################
#a way to get the JSON for that j variable???
##############################################
Run Code Online (Sandbox Code Playgroud)

我不想要:

from django.core import serializers
serializers.serialize('json', Job.objects.get(pk=1),ensure_ascii=False)
Run Code Online (Sandbox Code Playgroud)

因为它返回JSON数组,而不是单个对象表示.

有任何想法吗?

我正在考虑的一种方法是:找到一种方法来获取对象的哈希(属性,值),然后使用simplejson来获取它的JSON表示,但是我不知道如何获得该哈希.

ist*_*ble 30

怎么样只是按摩你从serializers.serialize回来的东西?从结果的正面和背面修剪方括号并不难.

job = Job.objects.get(pk=1)
array_result = serializers.serialize('json', [job], ensure_ascii=False)
just_object_result = array_result[1:-1]
Run Code Online (Sandbox Code Playgroud)

不是一个奇特的答案,但它会给你一个json表示法中的对象.

  • 不。`array_result` 是一个序列化为 json 的数组,它将是一个字符串,在开头和结尾处以 `[]` 结尾。如果`array_result = '[...]'` 那么`arrary_result[1:-1]` 给出`'...'`,`array_result[0]` 给出`'['`。这个问题是关于将数据序列化为字符串。`s[start:end]` 表示法是一个 [字符串 s 的片段](https://docs.python.org/3/library/stdtypes.html#common-sequence-operations)。 (2认同)
  • 这应该内置在模型中,就像一个 `.to_json()` 方法。 (2认同)

JPG*_*JPG 17

方法一

使用带python格式的Django Serializer

from django.core import serializers

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

方法二

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)[0]
Run Code Online (Sandbox Code Playgroud)

方法 3

使用Django REST Framework 的 Serializer 类 定义一个序列化器类并将实例序列化为

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
Run Code Online (Sandbox Code Playgroud)

参考
1. Serializer Django 模型对象


Pav*_*yak 9

我建议使用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 )
Run Code Online (Sandbox Code Playgroud)

你现在只需要一个直接的json.dumps电话:

import json
json.dumps(dict_obj)
Run Code Online (Sandbox Code Playgroud)

  • 这显然不适用于Date-Time对象. (2认同)
  • `json.dumps(dict_obj, cls=DjangoJSONEncoder)` 将处理日期时间 (2认同)