mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +03:00
Allow use of absolute URLs when deserializing hyperlinked fields
This commit is contained in:
parent
1b6fe9abb4
commit
5670cb03bf
|
@ -5,7 +5,7 @@ import warnings
|
||||||
|
|
||||||
from django.core import validators
|
from django.core import validators
|
||||||
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
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.conf import settings
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
from django.utils.encoding import is_protected_type, smart_unicode
|
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.reverse import reverse
|
||||||
from rest_framework.compat import parse_date, parse_datetime
|
from rest_framework.compat import parse_date, parse_datetime
|
||||||
from rest_framework.compat import timezone
|
from rest_framework.compat import timezone
|
||||||
|
from urlparse import urlparse
|
||||||
|
|
||||||
|
|
||||||
def is_simple_callable(obj):
|
def is_simple_callable(obj):
|
||||||
|
@ -372,6 +373,14 @@ class HyperlinkedRelatedField(RelatedField):
|
||||||
def from_native(self, value):
|
def from_native(self, value):
|
||||||
# Convert URL -> model instance pk
|
# Convert URL -> model instance pk
|
||||||
# TODO: Use values_list
|
# 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:
|
try:
|
||||||
match = resolve(value)
|
match = resolve(value)
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -158,7 +158,7 @@ class TestCreateWithForeignKeys(TestCase):
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'text': 'A test comment',
|
'text': 'A test comment',
|
||||||
'blog_post_url': '/posts/1/'
|
'blog_post_url': 'http://testserver/posts/1/'
|
||||||
}
|
}
|
||||||
|
|
||||||
request = factory.post('/comments/', data=data)
|
request = factory.post('/comments/', data=data)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user