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
f9004931
Commit
f9004931
authored
Sep 18, 2014
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added a model update integration test
parent
106362b4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
7 deletions
+49
-7
rest_framework/serializers.py
+6
-7
tests/test_model_serializer.py
+43
-0
No files found.
rest_framework/serializers.py
View file @
f9004931
...
@@ -350,17 +350,16 @@ class ModelSerializer(Serializer):
...
@@ -350,17 +350,16 @@ class ModelSerializer(Serializer):
# as they require that the instance has already been saved.
# as they require that the instance has already been saved.
info
=
model_meta
.
get_field_info
(
ModelClass
)
info
=
model_meta
.
get_field_info
(
ModelClass
)
many_to_many
=
{}
many_to_many
=
{}
for
key
,
relation_info
in
info
.
relations
.
items
():
for
field_name
,
relation_info
in
info
.
relations
.
items
():
if
relation_info
.
to_many
and
(
key
in
attrs
):
if
relation_info
.
to_many
and
(
field_name
in
attrs
):
many_to_many
[
key
]
=
attrs
.
pop
(
key
)
many_to_many
[
field_name
]
=
attrs
.
pop
(
field_name
)
instance
=
ModelClass
.
objects
.
create
(
**
attrs
)
instance
=
ModelClass
.
objects
.
create
(
**
attrs
)
# Save many
to
many relationships after the instance is created.
# Save many
-to-
many relationships after the instance is created.
if
many_to_many
:
if
many_to_many
:
for
key
,
value
in
many_to_many
.
items
():
for
field_name
,
value
in
many_to_many
.
items
():
setattr
(
instance
,
key
,
value
)
setattr
(
instance
,
field_name
,
value
)
instance
.
save
()
return
instance
return
instance
...
...
tests/test_model_serializer.py
View file @
f9004931
...
@@ -413,3 +413,46 @@ class TestIntegration(TestCase):
...
@@ -413,3 +413,46 @@ class TestIntegration(TestCase):
'through'
:
[]
'through'
:
[]
}
}
self
.
assertEqual
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_pk_update
(
self
):
new_foreign_key
=
ForeignKeyTargetModel
.
objects
.
create
(
name
=
'foreign_key'
)
new_one_to_one
=
OneToOneTargetModel
.
objects
.
create
(
name
=
'one_to_one'
)
new_many_to_many
=
[
ManyToManyTargetModel
.
objects
.
create
(
name
=
'new many_to_many (
%
d)'
%
idx
)
for
idx
in
range
(
3
)
]
data
=
{
'foreign_key'
:
new_foreign_key
.
pk
,
'one_to_one'
:
new_one_to_one
.
pk
,
'many_to_many'
:
[
item
.
pk
for
item
in
new_many_to_many
],
}
# Serializer should validate okay.
serializer
=
self
.
serializer_cls
(
self
.
instance
,
data
=
data
)
assert
serializer
.
is_valid
()
# Creating the instance, relationship attributes should be set.
instance
=
serializer
.
save
()
assert
instance
.
foreign_key
.
pk
==
new_foreign_key
.
pk
assert
instance
.
one_to_one
.
pk
==
new_one_to_one
.
pk
assert
[
item
.
pk
for
item
in
instance
.
many_to_many
.
all
()
]
==
[
item
.
pk
for
item
in
new_many_to_many
]
assert
list
(
instance
.
through
.
all
())
==
[]
# Representation should be correct.
expected
=
{
'id'
:
self
.
instance
.
pk
,
'foreign_key'
:
new_foreign_key
.
pk
,
'one_to_one'
:
new_one_to_one
.
pk
,
'many_to_many'
:
[
item
.
pk
for
item
in
new_many_to_many
],
'through'
:
[]
}
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