Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
8f6983ee
Commit
8f6983ee
authored
Jan 14, 2014
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://github.com/sprymak/django-rest-framework
into sprymak-master
parents
dde3b1df
ed8143b2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
3 deletions
+53
-3
rest_framework/serializers.py
+6
-3
rest_framework/settings.py
+1
-0
rest_framework/tests/test_hyperlinkedserializers.py
+46
-0
No files found.
rest_framework/serializers.py
View file @
8f6983ee
...
...
@@ -21,6 +21,8 @@ from django.db import models
from
django.forms
import
widgets
from
django.utils.datastructures
import
SortedDict
from
rest_framework.compat
import
get_concrete_model
,
six
from
rest_framework.settings
import
api_settings
# Note: We do the following so that users of the framework can use this style:
#
...
...
@@ -1031,6 +1033,7 @@ class HyperlinkedModelSerializerOptions(ModelSerializerOptions):
super
(
HyperlinkedModelSerializerOptions
,
self
)
.
__init__
(
meta
)
self
.
view_name
=
getattr
(
meta
,
'view_name'
,
None
)
self
.
lookup_field
=
getattr
(
meta
,
'lookup_field'
,
None
)
self
.
url_field_name
=
getattr
(
meta
,
'url_field_name'
,
api_settings
.
URL_FIELD_NAME
)
class
HyperlinkedModelSerializer
(
ModelSerializer
):
...
...
@@ -1049,13 +1052,13 @@ class HyperlinkedModelSerializer(ModelSerializer):
if
self
.
opts
.
view_name
is
None
:
self
.
opts
.
view_name
=
self
.
_get_default_view_name
(
self
.
opts
.
model
)
if
'url'
not
in
fields
:
if
self
.
opts
.
url_field_name
not
in
fields
:
url_field
=
self
.
_hyperlink_identify_field_class
(
view_name
=
self
.
opts
.
view_name
,
lookup_field
=
self
.
opts
.
lookup_field
)
ret
=
self
.
_dict_class
()
ret
[
'url'
]
=
url_field
ret
[
self
.
opts
.
url_field_name
]
=
url_field
ret
.
update
(
fields
)
fields
=
ret
...
...
@@ -1091,7 +1094,7 @@ class HyperlinkedModelSerializer(ModelSerializer):
We need to override the default, to use the url as the identity.
"""
try
:
return
data
.
get
(
'url'
,
None
)
return
data
.
get
(
self
.
opts
.
url_field_name
,
None
)
except
AttributeError
:
return
None
...
...
rest_framework/settings.py
View file @
8f6983ee
...
...
@@ -95,6 +95,7 @@ DEFAULTS = {
'URL_FORMAT_OVERRIDE'
:
'format'
,
'FORMAT_SUFFIX_KWARG'
:
'format'
,
'URL_FIELD_NAME'
:
'url'
,
# Input and output formats
'DATE_INPUT_FORMATS'
:
(
...
...
rest_framework/tests/test_hyperlinkedserializers.py
View file @
8f6983ee
...
...
@@ -3,6 +3,7 @@ import json
from
django.test
import
TestCase
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.settings
import
api_settings
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.tests.models
import
(
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
...
...
@@ -331,3 +332,48 @@ class TestOverriddenURLField(TestCase):
serializer
.
data
,
{
'title'
:
'New blog post'
,
'url'
:
'foo bar'
}
)
class
TestURLFieldNameBySettings
(
TestCase
):
urls
=
'rest_framework.tests.test_hyperlinkedserializers'
def
setUp
(
self
):
self
.
saved_url_field_name
=
api_settings
.
URL_FIELD_NAME
api_settings
.
URL_FIELD_NAME
=
'global_url_field'
class
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Meta
:
model
=
BlogPost
fields
=
(
'title'
,
api_settings
.
URL_FIELD_NAME
)
self
.
Serializer
=
Serializer
self
.
obj
=
BlogPost
.
objects
.
create
(
title
=
"New blog post"
)
def
tearDown
(
self
):
api_settings
.
URL_FIELD_NAME
=
self
.
saved_url_field_name
def
test_overridden_url_field_name
(
self
):
request
=
factory
.
get
(
'/posts/'
)
serializer
=
self
.
Serializer
(
self
.
obj
,
context
=
{
'request'
:
request
})
self
.
assertIn
(
api_settings
.
URL_FIELD_NAME
,
serializer
.
data
)
class
TestURLFieldNameByOptions
(
TestCase
):
urls
=
'rest_framework.tests.test_hyperlinkedserializers'
def
setUp
(
self
):
class
Serializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Meta
:
model
=
BlogPost
fields
=
(
'title'
,
'serializer_url_field'
)
url_field_name
=
'serializer_url_field'
self
.
Serializer
=
Serializer
self
.
obj
=
BlogPost
.
objects
.
create
(
title
=
"New blog post"
)
def
test_overridden_url_field_name
(
self
):
request
=
factory
.
get
(
'/posts/'
)
serializer
=
self
.
Serializer
(
self
.
obj
,
context
=
{
'request'
:
request
})
self
.
assertIn
(
self
.
Serializer
.
Meta
.
url_field_name
,
serializer
.
data
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment