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
50873343
Commit
50873343
authored
Apr 29, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #802 from chenjyw/master
Fix nesting issue with depth >=2
parents
33a26a76
8cbb715f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
24 deletions
+21
-24
rest_framework/serializers.py
+2
-12
rest_framework/tests/serializer.py
+19
-12
No files found.
rest_framework/serializers.py
View file @
50873343
...
@@ -206,18 +206,6 @@ class BaseSerializer(WritableField):
...
@@ -206,18 +206,6 @@ class BaseSerializer(WritableField):
return
ret
return
ret
#####
#####
# Field methods - used when the serializer class is itself used as a field.
def
initialize
(
self
,
parent
,
field_name
):
"""
Same behaviour as usual Field, except that we need to keep track
of state so that we can deal with handling maximum depth.
"""
super
(
BaseSerializer
,
self
)
.
initialize
(
parent
,
field_name
)
if
parent
.
opts
.
depth
:
self
.
opts
.
depth
=
parent
.
opts
.
depth
-
1
#####
# Methods to convert or revert from objects <--> primitive representations.
# Methods to convert or revert from objects <--> primitive representations.
def
get_field_key
(
self
,
field_name
):
def
get_field_key
(
self
,
field_name
):
...
@@ -619,6 +607,8 @@ class ModelSerializer(Serializer):
...
@@ -619,6 +607,8 @@ class ModelSerializer(Serializer):
class
NestedModelSerializer
(
ModelSerializer
):
class
NestedModelSerializer
(
ModelSerializer
):
class
Meta
:
class
Meta
:
model
=
model_field
.
rel
.
to
model
=
model_field
.
rel
.
to
depth
=
self
.
opts
.
depth
-
1
return
NestedModelSerializer
()
return
NestedModelSerializer
()
def
get_related_field
(
self
,
model_field
,
to_many
=
False
):
def
get_related_field
(
self
,
model_field
,
to_many
=
False
):
...
...
rest_framework/tests/serializer.py
View file @
50873343
...
@@ -3,7 +3,7 @@ from django.utils.datastructures import MultiValueDict
...
@@ -3,7 +3,7 @@ from django.utils.datastructures import MultiValueDict
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework.tests.models
import
(
HasPositiveIntegerAsChoice
,
Album
,
ActionItem
,
Anchor
,
BasicModel
,
from
rest_framework.tests.models
import
(
HasPositiveIntegerAsChoice
,
Album
,
ActionItem
,
Anchor
,
BasicModel
,
BlankFieldModel
,
BlogPost
,
Book
,
CallableDefaultValueModel
,
DefaultValueModel
,
BlankFieldModel
,
BlogPost
,
B
logPostComment
,
B
ook
,
CallableDefaultValueModel
,
DefaultValueModel
,
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
,
Photo
)
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
,
Photo
)
import
datetime
import
datetime
import
pickle
import
pickle
...
@@ -767,8 +767,6 @@ class RelatedTraversalTest(TestCase):
...
@@ -767,8 +767,6 @@ class RelatedTraversalTest(TestCase):
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
user
)
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
user
)
post
.
blogpostcomment_set
.
create
(
text
=
"I love this blog post"
)
post
.
blogpostcomment_set
.
create
(
text
=
"I love this blog post"
)
from
rest_framework.tests.models
import
BlogPostComment
class
PersonSerializer
(
serializers
.
ModelSerializer
):
class
PersonSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
class
Meta
:
model
=
Person
model
=
Person
...
@@ -968,23 +966,26 @@ class SerializerPickleTests(TestCase):
...
@@ -968,23 +966,26 @@ class SerializerPickleTests(TestCase):
class
DepthTest
(
TestCase
):
class
DepthTest
(
TestCase
):
def
test_implicit_nesting
(
self
):
def
test_implicit_nesting
(
self
):
writer
=
Person
.
objects
.
create
(
name
=
"django"
,
age
=
1
)
writer
=
Person
.
objects
.
create
(
name
=
"django"
,
age
=
1
)
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
writer
)
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
writer
)
comment
=
BlogPostComment
.
objects
.
create
(
text
=
"Test blog post comment"
,
blog_post
=
post
)
class
BlogPostSerializer
(
serializers
.
ModelSerializer
):
class
BlogPost
Comment
Serializer
(
serializers
.
ModelSerializer
):
class
Meta
:
class
Meta
:
model
=
BlogPost
model
=
BlogPost
Comment
depth
=
1
depth
=
2
serializer
=
BlogPost
Serializer
(
instance
=
pos
t
)
serializer
=
BlogPost
CommentSerializer
(
instance
=
commen
t
)
expected
=
{
'id'
:
1
,
'title'
:
'Test blog post'
,
expected
=
{
'id'
:
1
,
't
ext'
:
'Test blog post comment'
,
'blog_post'
:
{
'id'
:
1
,
't
itle'
:
'Test blog post'
,
'writer'
:
{
'id'
:
1
,
'name'
:
'django'
,
'age'
:
1
}}
'writer'
:
{
'id'
:
1
,
'name'
:
'django'
,
'age'
:
1
}}
}
self
.
assertEqual
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_explicit_nesting
(
self
):
def
test_explicit_nesting
(
self
):
writer
=
Person
.
objects
.
create
(
name
=
"django"
,
age
=
1
)
writer
=
Person
.
objects
.
create
(
name
=
"django"
,
age
=
1
)
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
writer
)
post
=
BlogPost
.
objects
.
create
(
title
=
"Test blog post"
,
writer
=
writer
)
comment
=
BlogPostComment
.
objects
.
create
(
text
=
"Test blog post comment"
,
blog_post
=
post
)
class
PersonSerializer
(
serializers
.
ModelSerializer
):
class
PersonSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
class
Meta
:
...
@@ -996,9 +997,15 @@ class DepthTest(TestCase):
...
@@ -996,9 +997,15 @@ class DepthTest(TestCase):
class
Meta
:
class
Meta
:
model
=
BlogPost
model
=
BlogPost
serializer
=
BlogPostSerializer
(
instance
=
post
)
class
BlogPostCommentSerializer
(
serializers
.
ModelSerializer
):
expected
=
{
'id'
:
1
,
'title'
:
'Test blog post'
,
blog_post
=
BlogPostSerializer
()
'writer'
:
{
'id'
:
1
,
'name'
:
'django'
,
'age'
:
1
}}
class
Meta
:
model
=
BlogPostComment
serializer
=
BlogPostCommentSerializer
(
instance
=
comment
)
expected
=
{
'id'
:
1
,
'text'
:
'Test blog post comment'
,
'blog_post'
:
{
'id'
:
1
,
'title'
:
'Test blog post'
,
'writer'
:
{
'id'
:
1
,
'name'
:
'django'
,
'age'
:
1
}}}
self
.
assertEqual
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
...
...
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