diff options
| author | Tom Christie | 2012-10-30 10:49:01 +0000 |
|---|---|---|
| committer | Tom Christie | 2012-10-30 10:49:01 +0000 |
| commit | 5670cb03bfa0ab62f90aed5fe3c62c5349d64264 (patch) | |
| tree | 25e54ad0e81477ef5588d8d9c9f0589cc59fe84b /rest_framework/fields.py | |
| parent | 1b6fe9abb4a8b7a5eade9fba5915ae0c116e42ea (diff) | |
| download | django-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.py | 11 |
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: |
