Django serializer for one object

Question:

I’m trying to figure out a way to serialize some Django model object to JSON format, something like:

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

I don’t want:

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

Because it returns JSON array, not a single object representation.

Any ideas?

One way I’m thinking of: is to find a way to get a hash(attribute,value) of the object and then use simplejson to get the JSON representation of it, however I don’t know how to get that hash.

Asked By: khelll

||

Answers:

How about just massaging what you get back from serializers.serialize? It is not that hard to trim off the square brackets from the front and back of the result.

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

Not a fancy answer but it will give you just the object in json notation.

Answered By: istruble

I would suggest using Django’s model_to_dict. If I’m not mistaken, serializers.serialize() relies on it, too, but it only works for list, not single model instance. That’s how you get a dict instance with your model fields out of a single model:

from django.forms.models import model_to_dict

# assuming obj is your model instance
dict_obj = model_to_dict( obj )

You now just need one straight json.dumps call:

import json
json.dumps(dict_obj)
Answered By: Pavel Daynyak

Method-1

Use Django Serializer with python format

from django.core import serializers

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

Method-2

use json format while serializing and loads the string response

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]

Method-3

Use Django REST Framework’s Serializer class
define a serializer class and serialize the instance as

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

Reference
1. Serializer Django model object

Answered By: JPG
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.