Fixed #5868 -- Provided an example of how to extend simplejson to serialize
lazy translation objects for those who want to use it directly. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6645 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
77a846bab0
commit
75efa2811d
|
@ -47,14 +47,14 @@ This is useful if you want to serialize data directly to a file-like object
|
||||||
Subset of fields
|
Subset of fields
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you only want a subset of fields to be serialized, you can
|
If you only want a subset of fields to be serialized, you can
|
||||||
specify a ``fields`` argument to the serializer::
|
specify a ``fields`` argument to the serializer::
|
||||||
|
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
|
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
|
||||||
|
|
||||||
In this example, only the ``name`` and ``size`` attributes of each model will
|
In this example, only the ``name`` and ``size`` attributes of each model will
|
||||||
be serialized.
|
be serialized.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ Django "ships" with a few included serializers:
|
||||||
``python`` Translates to and from "simple" Python objects (lists, dicts,
|
``python`` Translates to and from "simple" Python objects (lists, dicts,
|
||||||
strings, etc.). Not really all that useful on its own, but
|
strings, etc.). Not really all that useful on its own, but
|
||||||
used as a base for other serializers.
|
used as a base for other serializers.
|
||||||
|
|
||||||
``yaml`` Serializes to YAML (Yet Another Markup Lanuage). This
|
``yaml`` Serializes to YAML (Yet Another Markup Lanuage). This
|
||||||
serializer is only available if PyYAML_ is installed.
|
serializer is only available if PyYAML_ is installed.
|
||||||
========== ==============================================================
|
========== ==============================================================
|
||||||
|
|
||||||
.. _json: http://json.org/
|
.. _json: http://json.org/
|
||||||
|
@ -135,6 +135,23 @@ For example::
|
||||||
json_serializer = serializers.get_serializer("json")()
|
json_serializer = serializers.get_serializer("json")()
|
||||||
json_serializer.serialize(queryset, ensure_ascii=False, stream=response)
|
json_serializer.serialize(queryset, ensure_ascii=False, stream=response)
|
||||||
|
|
||||||
|
Django ships with a copy of simplejson_ in the source. Be aware, that if
|
||||||
|
you're using that for serializing directly that not all Django output can be
|
||||||
|
passed unmodified to simplejson. In particular, `lazy translation objects`_
|
||||||
|
need a `special encoder`_ written for them. Something like this will work::
|
||||||
|
|
||||||
|
from django.utils.functional import Promise
|
||||||
|
from django.utils.encoding import force_unicode
|
||||||
|
|
||||||
|
class LazyEncoder(simplejson.JSONEncoder):
|
||||||
|
def default(self, obj):
|
||||||
|
if isinstance(obj, Promise):
|
||||||
|
return force_unicode(obj)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
.. _lazy translation objects: ../i18n/#lazy-translation
|
||||||
|
.. _special encoder: http://svn.red-bean.com/bob/simplejson/tags/simplejson-1.7/docs/index.html
|
||||||
|
|
||||||
Writing custom serializers
|
Writing custom serializers
|
||||||
``````````````````````````
|
``````````````````````````
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue