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
4ad10949
Commit
4ad10949
authored
Jun 17, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HyperlinkedModelSerializer supports overriding of 'url' field. Closes #936
parent
a7a9e872
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
47 additions
and
23 deletions
+47
-23
rest_framework/serializers.py
+20
-23
rest_framework/tests/test_hyperlinkedserializers.py
+27
-0
tmp.html
+0
-0
No files found.
rest_framework/serializers.py
View file @
4ad10949
...
...
@@ -904,34 +904,20 @@ class HyperlinkedModelSerializer(ModelSerializer):
_default_view_name
=
'
%(model_name)
s-detail'
_hyperlink_field_class
=
HyperlinkedRelatedField
# Just a placeholder to ensure 'url' is the first field
# The field itself is actually created on initialization,
# when the view_name and lookup_field arguments are available.
url
=
Field
()
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
HyperlinkedModelSerializer
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
def
get_default_fields
(
self
):
fields
=
super
(
HyperlinkedModelSerializer
,
self
)
.
get_default_fields
()
if
self
.
opts
.
view_name
is
None
:
self
.
opts
.
view_name
=
self
.
_get_default_view_name
(
self
.
opts
.
model
)
url_field
=
HyperlinkedIdentityField
(
view_name
=
self
.
opts
.
view_name
,
lookup_field
=
self
.
opts
.
lookup_field
)
url_field
.
initialize
(
self
,
'url'
)
self
.
fields
[
'url'
]
=
url_field
if
'url'
not
in
fields
:
url_field
=
HyperlinkedIdentityField
(
view_name
=
self
.
opts
.
view_name
,
lookup_field
=
self
.
opts
.
lookup_field
)
fields
.
insert
(
0
,
'url'
,
url_field
)
def
_get_default_view_name
(
self
,
model
):
"""
Return the view name to use if 'view_name' is not specified in 'Meta'
"""
model_meta
=
model
.
_meta
format_kwargs
=
{
'app_label'
:
model_meta
.
app_label
,
'model_name'
:
model_meta
.
object_name
.
lower
()
}
return
self
.
_default_view_name
%
format_kwargs
return
fields
def
get_pk_field
(
self
,
model_field
):
if
self
.
opts
.
fields
and
model_field
.
name
in
self
.
opts
.
fields
:
...
...
@@ -966,3 +952,14 @@ class HyperlinkedModelSerializer(ModelSerializer):
return
data
.
get
(
'url'
,
None
)
except
AttributeError
:
return
None
def
_get_default_view_name
(
self
,
model
):
"""
Return the view name to use if 'view_name' is not specified in 'Meta'
"""
model_meta
=
model
.
_meta
format_kwargs
=
{
'app_label'
:
model_meta
.
app_label
,
'model_name'
:
model_meta
.
object_name
.
lower
()
}
return
self
.
_default_view_name
%
format_kwargs
rest_framework/tests/test_hyperlinkedserializers.py
View file @
4ad10949
...
...
@@ -301,3 +301,30 @@ class TestOptionalRelationHyperlinkedView(TestCase):
data
=
json
.
dumps
(
self
.
data
),
content_type
=
'application/json'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
class
TestOverriddenURLField
(
TestCase
):
def
setUp
(
self
):
class
OverriddenURLSerializer
(
serializers
.
HyperlinkedModelSerializer
):
url
=
serializers
.
SerializerMethodField
(
'get_url'
)
class
Meta
:
model
=
BlogPost
fields
=
(
'title'
,
'url'
)
def
get_url
(
self
,
obj
):
return
'foo bar'
self
.
Serializer
=
OverriddenURLSerializer
self
.
obj
=
BlogPost
.
objects
.
create
(
title
=
'New blog post'
)
def
test_overridden_url_field
(
self
):
"""
The 'url' field should respect overriding.
Regression test for #936.
"""
serializer
=
self
.
Serializer
(
self
.
obj
)
self
.
assertEqual
(
serializer
.
data
,
{
'title'
:
'New blog post'
,
'url'
:
'foo bar'
}
)
tmp.html
0 → 100644
View file @
4ad10949
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