Understanding django serializers with examples

MicroPyramid
1 min readApr 5, 2017

--

Serializers are used for “translating” Django models into other formats like XML, json, yaml(YAML Ain’t a Markup Language)

from django.core import serializersdata = serializers.serialize("xml", SomeModel.objects.all())

the first argument will be the format we want to serialize the data and second will be a QuerySet to serialize.

we can also translate using a serializer object directly

XMLSerializer = serializers.get_serializer("xml")xml_serializer = XMLSerializer()xml_serializer.serialize(queryset)data = xml_serializer.getvalue()

this is useful when we want data directly be a file like an object.

we can also translate the only subset of fields using fields argument

from django.core import serializersdata = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size')) class Teacher(models.Model):    name = models.CharField(max_length=50)    qualification = models.CharField(max_length=50)        class College(Teacher):    name = models.models.CharField(max_length=50)

for the inherited models, to translate child class objects we have to list all parent class objects and child class objects into a single list, then translate.

all_objects = list(Teacher.objects.all()) + list(College.objects.all())data = serializers.serialize('xml', all_objects)

Deserializing data:

for obj in serializers.deserialize("xml", data):
do_something_with(obj)

it will take same arguments as serialize function and returns an iterator

The objects returned by the deserialize iterator are unsaved objects and Calling DeserializedObject.save() saves the object to the database.

for deserialized_object in serializers.deserialize("xml", data):    if object_should_be_saved(deserialized_object):        deserialized_object.save()

The article was originally published at MicroPyramid blog.

--

--

MicroPyramid
MicroPyramid

Written by MicroPyramid

Python, Django, Android and IOS, reactjs, react-native, AWS, Salesforce consulting & development company

No responses yet