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
a0bab819
Commit
a0bab819
authored
Nov 08, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #388 from eofs/m2m_reverse
Fixed creation of objects with reversed M2M relations
parents
066d51fa
40c6fe71
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
2 deletions
+30
-2
docs/topics/release-notes.md
+5
-2
rest_framework/serializers.py
+7
-0
rest_framework/tests/pk_relations.py
+18
-0
No files found.
docs/topics/release-notes.md
View file @
a0bab819
...
@@ -4,6 +4,10 @@
...
@@ -4,6 +4,10 @@
>
>
> — Eric S. Raymond, [The Cathedral and the Bazaar][cite].
> — Eric S. Raymond, [The Cathedral and the Bazaar][cite].
## Master
*
Bugfix: Cannot create objects with reverse M2M relations
## 2.1.1
## 2.1.1
**Date**
: 7th Nov 2012
**Date**
: 7th Nov 2012
...
@@ -154,4 +158,4 @@
...
@@ -154,4 +158,4 @@
[
cite
]:
http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html
[
cite
]:
http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html
[
2.1.0-notes
]:
https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
[
2.1.0-notes
]:
https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
[
announcement
]:
rest-framework-2-announcement.md
[
announcement
]:
rest-framework-2-announcement.md
\ No newline at end of file
rest_framework/serializers.py
View file @
a0bab819
...
@@ -447,6 +447,13 @@ class ModelSerializer(Serializer):
...
@@ -447,6 +447,13 @@ class ModelSerializer(Serializer):
setattr
(
instance
,
key
,
val
)
setattr
(
instance
,
key
,
val
)
return
instance
return
instance
# Reverse relations
for
(
obj
,
model
)
in
self
.
opts
.
model
.
_meta
.
get_all_related_m2m_objects_with_model
():
field_name
=
obj
.
field
.
related_query_name
()
if
field_name
in
attrs
:
self
.
m2m_data
[
field_name
]
=
attrs
.
pop
(
field_name
)
# Forward relations
for
field
in
self
.
opts
.
model
.
_meta
.
many_to_many
:
for
field
in
self
.
opts
.
model
.
_meta
.
many_to_many
:
if
field
.
name
in
attrs
:
if
field
.
name
in
attrs
:
self
.
m2m_data
[
field
.
name
]
=
attrs
.
pop
(
field
.
name
)
self
.
m2m_data
[
field
.
name
]
=
attrs
.
pop
(
field
.
name
)
...
...
rest_framework/tests/pk_relations.py
View file @
a0bab819
...
@@ -117,6 +117,24 @@ class PrimaryKeyManyToManyTests(TestCase):
...
@@ -117,6 +117,24 @@ class PrimaryKeyManyToManyTests(TestCase):
]
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_create
(
self
):
data
=
{
'id'
:
4
,
'name'
:
u'target-4'
,
'sources'
:
[
1
,
3
]}
serializer
=
ManyToManyTargetSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEquals
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
u'target-4'
)
# Ensure target 4 is added, and everything else is as expected
queryset
=
ManyToManyTarget
.
objects
.
all
()
serializer
=
ManyToManyTargetSerializer
(
queryset
)
expected
=
[
{
'id'
:
1
,
'name'
:
u'target-1'
,
'sources'
:
[
1
,
2
,
3
]},
{
'id'
:
2
,
'name'
:
u'target-2'
,
'sources'
:
[
2
,
3
]},
{
'id'
:
3
,
'name'
:
u'target-3'
,
'sources'
:
[
3
]},
{
'id'
:
4
,
'name'
:
u'target-4'
,
'sources'
:
[
1
,
3
]}
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
class
PrimaryKeyForeignKeyTests
(
TestCase
):
class
PrimaryKeyForeignKeyTests
(
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
...
...
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