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
1d404874
Commit
1d404874
authored
Apr 16, 2014
by
Xavier Ordoquy
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1527 from Ian-Foote/generic_foreign_key
Set GenericForeignKey fields on object before save
parents
03b4c60b
853c7a16
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
10 deletions
+29
-10
rest_framework/serializers.py
+11
-10
rest_framework/tests/test_genericrelations.py
+18
-0
No files found.
rest_framework/serializers.py
View file @
1d404874
...
...
@@ -16,6 +16,7 @@ import datetime
import
inspect
import
types
from
decimal
import
Decimal
from
django.contrib.contenttypes.generic
import
GenericForeignKey
from
django.core.paginator
import
Page
from
django.db
import
models
from
django.forms
import
widgets
...
...
@@ -943,6 +944,8 @@ class ModelSerializer(Serializer):
# Forward m2m relations
for
field
in
meta
.
many_to_many
+
meta
.
virtual_fields
:
if
isinstance
(
field
,
GenericForeignKey
):
continue
if
field
.
name
in
attrs
:
m2m_data
[
field
.
name
]
=
attrs
.
pop
(
field
.
name
)
...
...
@@ -952,17 +955,15 @@ class ModelSerializer(Serializer):
if
isinstance
(
self
.
fields
.
get
(
field_name
,
None
),
Serializer
):
nested_forward_relations
[
field_name
]
=
attrs
[
field_name
]
# Update an existing instance...
if
instance
is
not
None
:
for
key
,
val
in
attrs
.
items
():
try
:
setattr
(
instance
,
key
,
val
)
except
ValueError
:
self
.
_errors
[
key
]
=
self
.
error_messages
[
'required'
]
# Create an empty instance of the model
if
instance
is
None
:
instance
=
self
.
opts
.
model
()
# ...or create a new instance
else
:
instance
=
self
.
opts
.
model
(
**
attrs
)
for
key
,
val
in
attrs
.
items
():
try
:
setattr
(
instance
,
key
,
val
)
except
ValueError
:
self
.
_errors
[
key
]
=
self
.
error_messages
[
'required'
]
# Any relations that cannot be set until we've
# saved the model get hidden away on these
...
...
rest_framework/tests/test_genericrelations.py
View file @
1d404874
...
...
@@ -131,3 +131,21 @@ class TestGenericRelations(TestCase):
}
]
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_restore_object_generic_fk
(
self
):
"""
Ensure an object with a generic foreign key can be restored.
"""
class
TagSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
Tag
exclude
=
(
'content_type'
,
'object_id'
)
serializer
=
TagSerializer
()
bookmark
=
Bookmark
(
url
=
'http://example.com'
)
attrs
=
{
'tagged_item'
:
bookmark
,
'tag'
:
'example'
}
tag
=
serializer
.
restore_object
(
attrs
)
self
.
assertEqual
(
tag
.
tagged_item
,
bookmark
)
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