summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2007-09-22 13:21:54 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2007-09-22 13:21:54 +0000
commitf2101abacff1069303d2afa204106e049c633654 (patch)
tree76286a9accc53220cf0857c9488efb7612b3e711
parent694323ec743b7beff9abb464bdd622599525f973 (diff)
Fixed #5553 -- Fixed a serialization problem with datetime and time objects. Thanks to pigletto for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6406 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/encoding.py3
-rw-r--r--tests/modeltests/serializers/models.py14
2 files changed, 14 insertions, 3 deletions
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index 69c3e9c28b..6daae4386d 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -1,5 +1,6 @@
import types
import urllib
+import datetime
from django.utils.functional import Promise
class StrAndUnicode(object):
@@ -30,7 +31,7 @@ def force_unicode(s, encoding='utf-8', strings_only=False, errors='strict'):
If strings_only is True, don't convert (some) non-string-like objects.
"""
- if strings_only and isinstance(s, (types.NoneType, int, long)):
+ if strings_only and isinstance(s, (types.NoneType, int, long, datetime.datetime, datetime.time, float)):
return s
if not isinstance(s, basestring,):
if hasattr(s, '__unicode__'):
diff --git a/tests/modeltests/serializers/models.py b/tests/modeltests/serializers/models.py
index a0a68d4bcc..a2388223f0 100644
--- a/tests/modeltests/serializers/models.py
+++ b/tests/modeltests/serializers/models.py
@@ -63,6 +63,9 @@ class Movie(models.Model):
def __unicode__(self):
return self.title
+
+class Score(models.Model):
+ score = models.FloatField()
__test__ = {'API_TESTS':"""
# Create some data:
@@ -83,7 +86,7 @@ __test__ = {'API_TESTS':"""
>>> a2 = Article(
... author = joe,
... headline = "Time to reform copyright",
-... pub_date = datetime(2006, 6, 16, 13, 00))
+... pub_date = datetime(2006, 6, 16, 13, 00, 11, 345))
>>> a1.save(); a2.save()
>>> a1.categories = [sports, op_ed]
>>> a2.categories = [music, op_ed]
@@ -181,7 +184,7 @@ __test__ = {'API_TESTS':"""
# Serializer output can be restricted to a subset of fields
>>> print serializers.serialize("json", Article.objects.all(), fields=('headline','pub_date'))
-[{"pk": 1, "model": "serializers.article", "fields": {"headline": "Just kidding; I love TV poker", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 2, "model": "serializers.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 3, "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00"}}]
+[{"pk": 1, "model": "serializers.article", "fields": {"headline": "Just kidding; I love TV poker", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 2, "model": "serializers.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:11"}}, {"pk": 3, "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00"}}]
# Every string is serialized as a unicode object, also primary key
# which is 'varchar'
@@ -207,4 +210,11 @@ u'G\u0119\u015bl\u0105 ja\u017a\u0144'
>>> print list(serializers.deserialize('json', serializers.serialize('json', [mv2])))[0].object.id
None
+# Serialization and deserialization of floats:
+>>> sc = Score(score=3.4)
+>>> print serializers.serialize("json", [sc])
+[{"pk": null, "model": "serializers.score", "fields": {"score": 3.4}}]
+>>> print list(serializers.deserialize('json', serializers.serialize('json', [sc])))[0].object.score
+3.4
+
"""}