aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2015-01-23 15:24:06 +0000
committerTom Christie2015-01-23 15:24:06 +0000
commite8db1834d3a3f6ba05276b64e5681288aa8f9820 (patch)
tree59f91c126148a0759d2f155f63531b7c2c154d42 /rest_framework
parent4201c9fb01beae84fc34a5b74e138e721de42de1 (diff)
downloaddjango-rest-framework-e8db1834d3a3f6ba05276b64e5681288aa8f9820.tar.bz2
Added UUIDField.
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/fields.py18
-rw-r--r--rest_framework/serializers.py8
2 files changed, 25 insertions, 1 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index cc9410aa..5e3f7ce4 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -23,6 +23,7 @@ import datetime
import decimal
import inspect
import re
+import uuid
class empty:
@@ -632,6 +633,23 @@ class URLField(CharField):
self.validators.append(validator)
+class UUIDField(Field):
+ default_error_messages = {
+ 'invalid': _('"{value}" is not a valid UUID.'),
+ }
+
+ def to_internal_value(self, data):
+ if not isinstance(data, uuid.UUID):
+ try:
+ return uuid.UUID(data)
+ except (ValueError, TypeError):
+ self.fail('invalid', value=data)
+ return data
+
+ def to_representation(self, value):
+ return str(value)
+
+
# Number types...
class IntegerField(Field):
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index cf797bdc..dca612ca 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -702,6 +702,7 @@ class ModelSerializer(Serializer):
you need you should either declare the extra/differing fields explicitly on
the serializer class, or simply use a `Serializer` class.
"""
+
_field_mapping = ClassLookupDict({
models.AutoField: IntegerField,
models.BigIntegerField: IntegerField,
@@ -724,7 +725,8 @@ class ModelSerializer(Serializer):
models.SmallIntegerField: IntegerField,
models.TextField: CharField,
models.TimeField: TimeField,
- models.URLField: URLField,
+ models.URLField: URLField
+ # Note: Some version-specific mappings also defined below.
})
_related_class = PrimaryKeyRelatedField
@@ -1132,6 +1134,10 @@ class ModelSerializer(Serializer):
return NestedSerializer
+if hasattr(models, 'UUIDField'):
+ ModelSerializer._field_mapping[models.UUIDField] = UUIDField
+
+
class HyperlinkedModelSerializer(ModelSerializer):
"""
A type of `ModelSerializer` that uses hyperlinked relationships instead