aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorTom Christie2012-10-30 10:49:01 +0000
committerTom Christie2012-10-30 10:49:01 +0000
commit5670cb03bfa0ab62f90aed5fe3c62c5349d64264 (patch)
tree25e54ad0e81477ef5588d8d9c9f0589cc59fe84b /rest_framework/fields.py
parent1b6fe9abb4a8b7a5eade9fba5915ae0c116e42ea (diff)
downloaddjango-rest-framework-5670cb03bfa0ab62f90aed5fe3c62c5349d64264.tar.bz2
Allow use of absolute URLs when deserializing hyperlinked fields
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index bb7d0918..7dab15fa 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -5,7 +5,7 @@ import warnings
from django.core import validators
from django.core.exceptions import ObjectDoesNotExist, ValidationError
-from django.core.urlresolvers import resolve
+from django.core.urlresolvers import resolve, get_script_prefix
from django.conf import settings
from django.forms import widgets
from django.utils.encoding import is_protected_type, smart_unicode
@@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _
from rest_framework.reverse import reverse
from rest_framework.compat import parse_date, parse_datetime
from rest_framework.compat import timezone
+from urlparse import urlparse
def is_simple_callable(obj):
@@ -372,6 +373,14 @@ class HyperlinkedRelatedField(RelatedField):
def from_native(self, value):
# Convert URL -> model instance pk
# TODO: Use values_list
+
+ if value.startswith('http:') or value.startswith('https:'):
+ # If needed convert absolute URLs to relative path
+ value = urlparse(value).path
+ prefix = get_script_prefix()
+ if value.startswith(prefix):
+ value = '/' + value[len(prefix):]
+
try:
match = resolve(value)
except: