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
8b73dce5
Commit
8b73dce5
authored
Jun 02, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
view_name argument to HyperlinkedModelSerializer is now properly enforced. Closes #471
parent
363b3425
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
11 deletions
+20
-11
rest_framework/relations.py
+8
-8
rest_framework/serializers.py
+12
-3
No files found.
rest_framework/relations.py
View file @
8b73dce5
...
@@ -72,7 +72,6 @@ class RelatedField(WritableField):
...
@@ -72,7 +72,6 @@ class RelatedField(WritableField):
else
:
# Reverse
else
:
# Reverse
self
.
queryset
=
manager
.
field
.
rel
.
to
.
_default_manager
.
all
()
self
.
queryset
=
manager
.
field
.
rel
.
to
.
_default_manager
.
all
()
except
Exception
:
except
Exception
:
raise
msg
=
(
'Serializer related fields must include a `queryset`'
+
msg
=
(
'Serializer related fields must include a `queryset`'
+
' argument or set `read_only=True'
)
' argument or set `read_only=True'
)
raise
Exception
(
msg
)
raise
Exception
(
msg
)
...
@@ -488,14 +487,15 @@ class HyperlinkedIdentityField(Field):
...
@@ -488,14 +487,15 @@ class HyperlinkedIdentityField(Field):
slug_url_kwarg
=
None
# Defaults to same as `slug_field` unless overridden
slug_url_kwarg
=
None
# Defaults to same as `slug_field` unless overridden
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
# TODO: Make view_name mandatory, and have the
try
:
# HyperlinkedModelSerializer set it on-the-fly
self
.
view_name
=
kwargs
.
pop
(
'view_name'
)
self
.
view_name
=
kwargs
.
pop
(
'view_name'
,
None
)
except
KeyError
:
# Optionally the format of the target hyperlink may be specified
msg
=
"HyperlinkedIdentityField requires 'view_name' argument"
raise
ValueError
(
msg
)
self
.
format
=
kwargs
.
pop
(
'format'
,
None
)
self
.
format
=
kwargs
.
pop
(
'format'
,
None
)
lookup_field
=
kwargs
.
pop
(
'lookup_field'
,
None
)
lookup_field
=
kwargs
.
pop
(
'lookup_field'
,
None
)
if
lookup_field
is
not
None
:
self
.
lookup_field
=
lookup_field
or
self
.
lookup_field
self
.
lookup_field
=
lookup_field
# These are pending deprecation
# These are pending deprecation
if
'pk_url_kwarg'
in
kwargs
:
if
'pk_url_kwarg'
in
kwargs
:
...
@@ -518,7 +518,7 @@ class HyperlinkedIdentityField(Field):
...
@@ -518,7 +518,7 @@ class HyperlinkedIdentityField(Field):
def
field_to_native
(
self
,
obj
,
field_name
):
def
field_to_native
(
self
,
obj
,
field_name
):
request
=
self
.
context
.
get
(
'request'
,
None
)
request
=
self
.
context
.
get
(
'request'
,
None
)
format
=
self
.
context
.
get
(
'format'
,
None
)
format
=
self
.
context
.
get
(
'format'
,
None
)
view_name
=
self
.
view_name
or
self
.
parent
.
opts
.
view_name
view_name
=
self
.
view_name
if
request
is
None
:
if
request
is
None
:
warnings
.
warn
(
"Using `HyperlinkedIdentityField` without including the "
warnings
.
warn
(
"Using `HyperlinkedIdentityField` without including the "
...
...
rest_framework/serializers.py
View file @
8b73dce5
...
@@ -903,15 +903,24 @@ class HyperlinkedModelSerializer(ModelSerializer):
...
@@ -903,15 +903,24 @@ class HyperlinkedModelSerializer(ModelSerializer):
_default_view_name
=
'
%(model_name)
s-detail'
_default_view_name
=
'
%(model_name)
s-detail'
_hyperlink_field_class
=
HyperlinkedRelatedField
_hyperlink_field_class
=
HyperlinkedRelatedField
url
=
HyperlinkedIdentityField
()
# 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
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
HyperlinkedModelSerializer
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
super
(
HyperlinkedModelSerializer
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
lookup_field
=
self
.
opts
.
lookup_field
self
.
fields
[
'url'
]
=
HyperlinkedIdentityField
(
lookup_field
=
lookup_field
)
if
self
.
opts
.
view_name
is
None
:
if
self
.
opts
.
view_name
is
None
:
self
.
opts
.
view_name
=
self
.
_get_default_view_name
(
self
.
opts
.
model
)
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
def
_get_default_view_name
(
self
,
model
):
def
_get_default_view_name
(
self
,
model
):
"""
"""
Return the view name to use if 'view_name' is not specified in 'Meta'
Return the view name to use if 'view_name' is not specified in 'Meta'
...
...
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