Серийный анализатор 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-представления, однако я не знаю, как это получить хэш.

Ответ 1

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

Ответ 2

Я бы предложил использовать 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)

Ответ 3

Метод-1

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

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

Используйте класс Serializer 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 модель объекта