Skip to content

Instantly share code, notes, and snippets.

@mdamien
Created July 19, 2016 15:38
Show Gist options
  • Save mdamien/869639d794f8a5cc2c2b1db865584b50 to your computer and use it in GitHub Desktop.
Save mdamien/869639d794f8a5cc2c2b1db865584b50 to your computer and use it in GitHub Desktop.
django deep serialization
# override the default to use timestamps for date instead of ISO
class TimestampJSONEncoder(DjangoJSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
return int(o.strftime("%s"))
return super().default(o)
# if foreign key was prefected, serialize object with foreign key value directly
class ForeignKeyIncludeSerializer(PythonSerializer):
def handle_fk_field(self, obj, field):
# import pudb; pu.db
value = None
attr = getattr(obj, field.name)
if attr:
serializer = ForeignKeyIncludeSerializer()
value = serializer.serialize([attr])[0]['fields']
value['id'] = attr.id
if field.name not in self._current:
self._current[field.name] = value
def _serialize(object):
serializer = ForeignKeyIncludeSerializer()
output = serializer.serialize([object])[0]['fields']
output['id'] = object.id
return json.loads(json.dumps(output, cls=TimestampJSONEncoder))
def _serialize_list(objects):
return [_serialize(o) for o in objects]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment