diff options
| author | Tom Christie | 2013-02-04 20:37:09 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-02-04 20:37:09 +0000 |
| commit | 8e846bdf52f03d0733ac73e418152800e582b898 (patch) | |
| tree | cd7034d5573f1e264798a618c88addc4d2f45ce0 /rest_framework/relations.py | |
| parent | d9b73e15c87c3a7f11d6bea5ffd6118f86e40051 (diff) | |
| parent | 97f2b994951605ffdef08159be450d1e77762bf9 (diff) | |
| download | django-rest-framework-8e846bdf52f03d0733ac73e418152800e582b898.tar.bz2 | |
Merge branch 'py3k' into 2.2
Conflicts:
rest_framework/relations.py
rest_framework/serializers.py
rest_framework/tests/relations_hyperlink.py
rest_framework/tests/relations_slug.py
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):] |
