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
41045c1c
Commit
41045c1c
authored
Dec 02, 2014
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'gregmuellegger-fixes/2013'
parents
79e18a2a
76ac641f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
1 deletions
+42
-1
rest_framework/serializers.py
+18
-1
tests/test_model_serializer.py
+24
-0
No files found.
rest_framework/serializers.py
View file @
41045c1c
...
@@ -653,7 +653,24 @@ class ModelSerializer(Serializer):
...
@@ -653,7 +653,24 @@ class ModelSerializer(Serializer):
if
relation_info
.
to_many
and
(
field_name
in
validated_attrs
):
if
relation_info
.
to_many
and
(
field_name
in
validated_attrs
):
many_to_many
[
field_name
]
=
validated_attrs
.
pop
(
field_name
)
many_to_many
[
field_name
]
=
validated_attrs
.
pop
(
field_name
)
instance
=
ModelClass
.
objects
.
create
(
**
validated_attrs
)
try
:
instance
=
ModelClass
.
objects
.
create
(
**
validated_attrs
)
except
TypeError
as
exc
:
msg
=
(
'Got a `TypeError` when calling `
%
s.objects.create()`. '
'This may be because you have a writable field on the '
'serializer class that is not a valid argument to '
'`
%
s.objects.create()`. You may need to make the field '
'read-only, or override the
%
s.create() method to handle '
'this correctly.
\n
Original exception text was:
%
s.'
%
(
ModelClass
.
__name__
,
ModelClass
.
__name__
,
self
.
__class__
.
__name__
,
exc
)
)
raise
TypeError
(
msg
)
# 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
:
...
...
tests/test_model_serializer.py
View file @
41045c1c
...
@@ -26,6 +26,10 @@ class CustomField(models.Field):
...
@@ -26,6 +26,10 @@ class CustomField(models.Field):
pass
pass
class
OneFieldModel
(
models
.
Model
):
char_field
=
models
.
CharField
(
max_length
=
100
)
class
RegularFieldsModel
(
models
.
Model
):
class
RegularFieldsModel
(
models
.
Model
):
"""
"""
A model class for testing regular flat fields.
A model class for testing regular flat fields.
...
@@ -68,6 +72,26 @@ class FieldOptionsModel(models.Model):
...
@@ -68,6 +72,26 @@ class FieldOptionsModel(models.Model):
choices_field
=
models
.
CharField
(
max_length
=
100
,
choices
=
COLOR_CHOICES
)
choices_field
=
models
.
CharField
(
max_length
=
100
,
choices
=
COLOR_CHOICES
)
class
TestModelSerializer
(
TestCase
):
def
test_create_method
(
self
):
class
TestSerializer
(
serializers
.
ModelSerializer
):
non_model_field
=
serializers
.
CharField
()
class
Meta
:
model
=
OneFieldModel
fields
=
(
'char_field'
,
'non_model_field'
)
serializer
=
TestSerializer
(
data
=
{
'char_field'
:
'foo'
,
'non_model_field'
:
'bar'
,
})
serializer
.
is_valid
()
with
self
.
assertRaises
(
TypeError
)
as
excinfo
:
serializer
.
save
()
msginitial
=
'Got a `TypeError` when calling `OneFieldModel.objects.create()`.'
assert
str
(
excinfo
.
exception
)
.
startswith
(
msginitial
)
class
TestRegularFieldMappings
(
TestCase
):
class
TestRegularFieldMappings
(
TestCase
):
def
test_regular_fields
(
self
):
def
test_regular_fields
(
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