aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2011-06-21 23:01:41 +0100
committerTom Christie2011-06-21 23:01:41 +0100
commit82de0cf50a6f4ac2a3646a2524d149b7e7c85b2c (patch)
tree89e4cadadc02f2a87fff4c21dbdfc48039467770
parentf02a4e189063cbe67c3e452e06542f0856863f41 (diff)
downloaddjango-rest-framework-82de0cf50a6f4ac2a3646a2524d149b7e7c85b2c.tar.bz2
Decimals are a protected_type - let's leave them up to the renderer to deal with
-rw-r--r--djangorestframework/renderers.py2
-rw-r--r--djangorestframework/serializer.py19
-rw-r--r--djangorestframework/tests/serializer.py2
3 files changed, 10 insertions, 13 deletions
diff --git a/djangorestframework/renderers.py b/djangorestframework/renderers.py
index 7aa8777c..56939bbc 100644
--- a/djangorestframework/renderers.py
+++ b/djangorestframework/renderers.py
@@ -108,6 +108,7 @@ class XMLRenderer(BaseRenderer):
"""
Renderer which serializes to XML.
"""
+
media_type = 'application/xml'
def render(self, obj=None, media_type=None):
@@ -251,6 +252,7 @@ class DocumentingTemplateRenderer(BaseRenderer):
The context used in the template contains all the information
needed to self-document the response to this request.
"""
+
content = self._get_content(self.view, self.view.request, obj, media_type)
put_form_instance = self._get_form_instance(self.view, 'put')
diff --git a/djangorestframework/serializer.py b/djangorestframework/serializer.py
index 8d73d623..da8036e9 100644
--- a/djangorestframework/serializer.py
+++ b/djangorestframework/serializer.py
@@ -4,7 +4,7 @@ Customizable serialization.
from django.db import models
from django.db.models.query import QuerySet
from django.db.models.fields.related import RelatedField
-from django.utils.encoding import smart_unicode
+from django.utils.encoding import smart_unicode, is_protected_type
import decimal
import inspect
@@ -273,13 +273,6 @@ class Serializer(object):
return self.serialize_iter(obj.all())
- def serialize_decimal(self, obj):
- """
- Convert a Decimal instance into a serializable representation.
- """
- return str(obj)
-
-
def serialize_fallback(self, obj):
"""
Convert any unhandled object into a serializable representation.
@@ -301,9 +294,6 @@ class Serializer(object):
elif isinstance(obj, models.Manager):
# Manager objects
return self.serialize_manager(obj)
- elif isinstance(obj, decimal.Decimal):
- # Decimals (force to string representation)
- return self.serialize_decimal(obj)
elif inspect.isfunction(obj) and not inspect.getargspec(obj)[0]:
# function with no args
return self.serialize_func(obj)
@@ -311,5 +301,10 @@ class Serializer(object):
# bound method
return self.serialize_func(obj)
- # fall back to smart unicode
+ # Protected types are passed through as is.
+ # (i.e. Primitives like None, numbers, dates, and Decimals.)
+ if is_protected_type(obj):
+ return obj
+
+ # All other values are converted to string.
return self.serialize_fallback(obj)
diff --git a/djangorestframework/tests/serializer.py b/djangorestframework/tests/serializer.py
index 783e941e..9f629050 100644
--- a/djangorestframework/tests/serializer.py
+++ b/djangorestframework/tests/serializer.py
@@ -18,7 +18,7 @@ class TestObjectToData(TestCase):
def test_decimal(self):
"""Decimals need to be converted to a string representation."""
- self.assertEquals(self.serialize(decimal.Decimal('1.5')), '1.5')
+ self.assertEquals(self.serialize(decimal.Decimal('1.5')), decimal.Decimal('1.5'))
def test_function(self):
"""Functions with no arguments should be called."""