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
76bf8db8
Commit
76bf8db8
authored
Mar 13, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/tomchristie/django-rest-framework
parents
73ab7dc3
0cf94cbd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
72 additions
and
2 deletions
+72
-2
rest_framework/serializers.py
+5
-2
rest_framework/tests/multitable_inheritance.py
+67
-0
No files found.
rest_framework/serializers.py
View file @
76bf8db8
...
@@ -456,8 +456,11 @@ class ModelSerializer(Serializer):
...
@@ -456,8 +456,11 @@ class ModelSerializer(Serializer):
"Serializer class '
%
s' is missing 'model' Meta option"
%
self
.
__class__
.
__name__
"Serializer class '
%
s' is missing 'model' Meta option"
%
self
.
__class__
.
__name__
opts
=
get_concrete_model
(
cls
)
.
_meta
opts
=
get_concrete_model
(
cls
)
.
_meta
pk_field
=
opts
.
pk
pk_field
=
opts
.
pk
# while pk_field.rel:
# pk_field = pk_field.rel.to._meta.pk
# If model is a child via multitable inheritance, use parent's pk
while
pk_field
.
rel
and
pk_field
.
rel
.
parent_link
:
pk_field
=
pk_field
.
rel
.
to
.
_meta
.
pk
fields
=
[
pk_field
]
fields
=
[
pk_field
]
fields
+=
[
field
for
field
in
opts
.
fields
if
field
.
serialize
]
fields
+=
[
field
for
field
in
opts
.
fields
if
field
.
serialize
]
fields
+=
[
field
for
field
in
opts
.
many_to_many
if
field
.
serialize
]
fields
+=
[
field
for
field
in
opts
.
many_to_many
if
field
.
serialize
]
...
...
rest_framework/tests/multitable_inheritance.py
0 → 100644
View file @
76bf8db8
from
__future__
import
unicode_literals
from
django.db
import
models
from
django.test
import
TestCase
from
rest_framework
import
serializers
from
rest_framework.tests.models
import
RESTFrameworkModel
# Models
class
ParentModel
(
RESTFrameworkModel
):
name1
=
models
.
CharField
(
max_length
=
100
)
class
ChildModel
(
ParentModel
):
name2
=
models
.
CharField
(
max_length
=
100
)
class
AssociatedModel
(
RESTFrameworkModel
):
ref
=
models
.
OneToOneField
(
ParentModel
,
primary_key
=
True
)
name
=
models
.
CharField
(
max_length
=
100
)
# Serializers
class
DerivedModelSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
ChildModel
class
AssociatedModelSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
AssociatedModel
# Tests
class
IneritedModelSerializationTests
(
TestCase
):
def
test_multitable_inherited_model_fields_as_expected
(
self
):
"""
Assert that the parent pointer field is not included in the fields
serialized fields
"""
child
=
ChildModel
(
name1
=
'parent name'
,
name2
=
'child name'
)
serializer
=
DerivedModelSerializer
(
child
)
self
.
assertEqual
(
set
(
serializer
.
data
.
keys
()),
set
([
'name1'
,
'name2'
,
'id'
]))
def
test_onetoone_primary_key_model_fields_as_expected
(
self
):
"""
Assert that a model with a onetoone field that is the primary key is
not treated like a derived model
"""
parent
=
ParentModel
(
name1
=
'parent name'
)
associate
=
AssociatedModel
(
name
=
'hello'
,
ref
=
parent
)
serializer
=
AssociatedModelSerializer
(
associate
)
self
.
assertEqual
(
set
(
serializer
.
data
.
keys
()),
set
([
'name'
,
'ref'
]))
def
test_data_is_valid_without_parent_ptr
(
self
):
"""
Assert that the pointer to the parent table is not a required field
for input data
"""
data
=
{
'name1'
:
'parent name'
,
'name2'
:
'child name'
,
}
serializer
=
DerivedModelSerializer
(
data
=
data
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
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