summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Hetzenecker <lukas@splots.co>2015-06-23 22:56:22 +0200
committerClaude Paroz <claude@2xlibre.net>2015-07-10 09:02:14 +0200
commitebcfedb0e541a4840c375375ab41fc513f322b7d (patch)
tree2a9ffdf93f54a2e624d794d7c6dbf870b8a38003
parent0db2cdb1fa9e08658d78ff58ea9bd698ea12d3fa (diff)
[1.8.x] Fixed #25019 -- Added UUID support in DjangoJSONEncoder
Backport of 6355a6d4f5 and 2e05ef4e18 from master.
-rw-r--r--django/core/serializers/json.py5
-rw-r--r--docs/releases/1.8.4.txt3
-rw-r--r--tests/httpwrappers/tests.py6
3 files changed, 12 insertions, 2 deletions
diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py
index f67295edf9..764640465d 100644
--- a/django/core/serializers/json.py
+++ b/django/core/serializers/json.py
@@ -8,6 +8,7 @@ from __future__ import absolute_import, unicode_literals
import datetime
import decimal
import json
+import uuid
import sys
from django.core.serializers.base import DeserializationError
@@ -86,7 +87,7 @@ def Deserializer(stream_or_string, **options):
class DjangoJSONEncoder(json.JSONEncoder):
"""
- JSONEncoder subclass that knows how to encode date/time and decimal types.
+ JSONEncoder subclass that knows how to encode date/time, decimal types and UUIDs.
"""
def default(self, o):
# See "Date Time String Format" in the ECMA-262 specification.
@@ -108,6 +109,8 @@ class DjangoJSONEncoder(json.JSONEncoder):
return r
elif isinstance(o, decimal.Decimal):
return str(o)
+ elif isinstance(o, uuid.UUID):
+ return str(o)
else:
return super(DjangoJSONEncoder, self).default(o)
diff --git a/docs/releases/1.8.4.txt b/docs/releases/1.8.4.txt
index 7b10cb5b91..9252d9ae5a 100644
--- a/docs/releases/1.8.4.txt
+++ b/docs/releases/1.8.4.txt
@@ -9,4 +9,5 @@ Django 1.8.4 fixes several bugs in 1.8.3.
Bugfixes
========
-* ...
+* Added the ability to serialize values from the newly added
+ :class:`~django.db.models.UUIDField` (:ticket:`25019`).
diff --git a/tests/httpwrappers/tests.py b/tests/httpwrappers/tests.py
index 25da7b622c..c7bf63b4ca 100644
--- a/tests/httpwrappers/tests.py
+++ b/tests/httpwrappers/tests.py
@@ -6,6 +6,7 @@ import json
import os
import pickle
import unittest
+import uuid
from django.core.exceptions import SuspiciousOperation
from django.core.serializers.json import DjangoJSONEncoder
@@ -480,6 +481,11 @@ class JsonResponseTests(TestCase):
response = JsonResponse(['foo', 'bar'], safe=False)
self.assertEqual(json.loads(response.content.decode()), ['foo', 'bar'])
+ def test_json_response_uuid(self):
+ u = uuid.uuid4()
+ response = JsonResponse(u, safe=False)
+ self.assertEqual(json.loads(response.content.decode()), str(u))
+
def test_json_response_custom_encoder(self):
class CustomDjangoJSONEncoder(DjangoJSONEncoder):
def encode(self, o):