Серийный анализатор 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 модель объекта