diff options
| author | Tom Christie | 2015-01-23 15:24:06 +0000 | 
|---|---|---|
| committer | Tom Christie | 2015-01-23 15:24:06 +0000 | 
| commit | e8db1834d3a3f6ba05276b64e5681288aa8f9820 (patch) | |
| tree | 59f91c126148a0759d2f155f63531b7c2c154d42 /rest_framework | |
| parent | 4201c9fb01beae84fc34a5b74e138e721de42de1 (diff) | |
| download | django-rest-framework-e8db1834d3a3f6ba05276b64e5681288aa8f9820.tar.bz2 | |
Added UUIDField.
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/fields.py | 18 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 8 | 
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 | 
