Сериализатор Django для одного объекта - PullRequest
15 голосов
/ 06 марта 2010

Я пытаюсь найти способ сериализации объекта модели 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 ]

28 голосов
/ 06 марта 2010

Как насчет того, чтобы просто массировать то, что вы получаете от 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.

8 голосов
/ 25 февраля 2016

Я бы предложил использовать 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)
1 голос
/ 07 мая 2019

Метод-1

Используйте Django Serializer с python форматом

from django.core import serializers

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

Метод-2

использовать json форматировать при сериализации и загружать строковый ответ

<b>import json</b>
from django.core import serializers

j = Job.objects.get(pk=1)
<b>json_str_response = serializers.serialize('json', [j], ensure_ascii=False)
response = json.loads(json_str_response)</b>

Метод-3 * * тысяча двадцать-семь Использование Класс сериализатора 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...