diff options
Diffstat (limited to 'rest_framework/relations.py')
| -rw-r--r-- | rest_framework/relations.py | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/rest_framework/relations.py b/rest_framework/relations.py index d49ca39b..93f19362 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -1,15 +1,20 @@ + +from __future__ import unicode_literals +  from django.core.exceptions import ObjectDoesNotExist, ValidationError  from django.core.urlresolvers import resolve, get_script_prefix  from django import forms  from django.forms import widgets  from django.forms.models import ModelChoiceIterator -from django.utils.encoding import smart_unicode  from django.utils.translation import ugettext_lazy as _  from rest_framework.fields import Field, WritableField  from rest_framework.reverse import reverse  from urlparse import urlparse +from rest_framework.compat import urlparse +from rest_framework.compat import smart_text  import warnings +  ##### Relational fields ##### @@ -72,8 +77,8 @@ class RelatedField(WritableField):          """          Return a readable representation for use with eg. select widgets.          """ -        desc = smart_unicode(obj) -        ident = smart_unicode(self.to_native(obj)) +        desc = smart_text(obj) +        ident = smart_text(self.to_native(obj))          if desc == ident:              return desc          return "%s - %s" % (desc, ident) @@ -177,8 +182,8 @@ class PrimaryKeyRelatedField(RelatedField):          """          Return a readable representation for use with eg. select widgets.          """ -        desc = smart_unicode(obj) -        ident = smart_unicode(self.to_native(obj.pk)) +        desc = smart_text(obj) +        ident = smart_text(self.to_native(obj.pk))          if desc == ident:              return desc          return "%s - %s" % (desc, ident) @@ -194,7 +199,7 @@ class PrimaryKeyRelatedField(RelatedField):          try:              return self.queryset.get(pk=data)          except ObjectDoesNotExist: -            msg = self.error_messages['does_not_exist'] % smart_unicode(data) +            msg = self.error_messages['does_not_exist'] % smart_text(data)              raise ValidationError(msg)          except (TypeError, ValueError):              received = type(data).__name__ @@ -224,6 +229,7 @@ class PrimaryKeyRelatedField(RelatedField):                  pk = getattr(obj, self.source or field_name).pk              except ObjectDoesNotExist:                  return None +            return self.to_native(obj.pk)          # Forward relationship          return self.to_native(pk) @@ -259,7 +265,7 @@ class SlugRelatedField(RelatedField):              return self.queryset.get(**{self.slug_field: data})          except ObjectDoesNotExist:              raise ValidationError(self.error_messages['does_not_exist'] % -                                  (self.slug_field, unicode(data))) +                                  (self.slug_field, smart_text(data)))          except (TypeError, ValueError):              msg = self.error_messages['invalid']              raise ValidationError(msg) @@ -350,7 +356,7 @@ class HyperlinkedRelatedField(RelatedField):          if http_prefix:              # If needed convert absolute URLs to relative path -            value = urlparse(value).path +            value = urlparse.urlparse(value).path              prefix = get_script_prefix()              if value.startswith(prefix):                  value = '/' + value[len(prefix):]  | 
