diff options
Diffstat (limited to 'rest_framework/fields.py')
| -rw-r--r-- | rest_framework/fields.py | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 46fb3152..d772c400 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -26,7 +26,7 @@ from rest_framework import ISO_8601 from rest_framework.compat import timezone, parse_date, parse_datetime, parse_time from rest_framework.compat import BytesIO from rest_framework.compat import six -from rest_framework.compat import smart_text +from rest_framework.compat import smart_text, force_text, is_non_str_iterable from rest_framework.settings import api_settings @@ -45,7 +45,6 @@ def is_simple_callable(obj): len_defaults = len(defaults) if defaults else 0 return len_args <= len_defaults - def get_component(obj, attr_name): """ Given an object, and an attribute name, @@ -175,7 +174,8 @@ class Field(object): if is_protected_type(value): return value - elif hasattr(value, '__iter__') and not isinstance(value, (dict, six.string_types)): + elif (is_non_str_iterable(value) and + not isinstance(value, (dict, six.string_types))): return [self.to_native(item) for item in value] elif isinstance(value, dict): # Make sure we preserve field ordering, if it exists @@ -183,7 +183,7 @@ class Field(object): for key, val in value.items(): ret[key] = self.to_native(val) return ret - return smart_text(value) + return force_text(value) def attributes(self): """ @@ -396,11 +396,25 @@ class URLField(CharField): class SlugField(CharField): type_name = 'SlugField' - + form_field_class = forms.SlugField + + default_error_messages = { + 'invalid': _("Enter a valid 'slug' consisting of letters, numbers," + " underscores or hyphens."), + } + default_validators = [validators.validate_slug] + def __init__(self, *args, **kwargs): super(SlugField, self).__init__(*args, **kwargs) - + def __deepcopy__(self, memo): + result = copy.copy(self) + memo[id(self)] = result + #result.widget = copy.deepcopy(self.widget, memo) + result.validators = self.validators[:] + return result + + class ChoiceField(WritableField): type_name = 'ChoiceField' form_field_class = forms.ChoiceField |
