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
7ade5add
Commit
7ade5add
authored
Nov 22, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #439 from irrelative/master
Cache all fields per serializer instance
parents
ac84c2ed
2e36e0c9
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
9 additions
and
13 deletions
+9
-13
rest_framework/serializers.py
+9
-13
No files found.
rest_framework/serializers.py
View file @
7ade5add
...
...
@@ -60,7 +60,7 @@ def _get_declared_fields(bases, attrs):
# If this class is subclassing another Serializer, add that Serializer's
# fields. Note that we loop over the bases in *reverse*. This is necessary
# in order to the correct order of fields.
# in order to
maintain
the correct order of fields.
for
base
in
bases
[::
-
1
]:
if
hasattr
(
base
,
'base_fields'
):
fields
=
base
.
base_fields
.
items
()
+
fields
...
...
@@ -94,7 +94,6 @@ class BaseSerializer(Field):
def
__init__
(
self
,
instance
=
None
,
data
=
None
,
files
=
None
,
context
=
None
,
partial
=
False
,
**
kwargs
):
super
(
BaseSerializer
,
self
)
.
__init__
(
**
kwargs
)
self
.
opts
=
self
.
_options_class
(
self
.
Meta
)
self
.
fields
=
copy
.
deepcopy
(
self
.
base_fields
)
self
.
parent
=
None
self
.
root
=
None
self
.
partial
=
partial
...
...
@@ -104,7 +103,7 @@ class BaseSerializer(Field):
self
.
init_data
=
data
self
.
init_files
=
files
self
.
object
=
instance
self
.
default_fields
=
self
.
get_defaul
t_fields
()
self
.
fields
=
self
.
ge
t_fields
()
self
.
_data
=
None
self
.
_files
=
None
...
...
@@ -129,13 +128,15 @@ class BaseSerializer(Field):
ret
=
SortedDict
()
# Get the explicitly declared fields
for
key
,
field
in
self
.
fields
.
items
():
base_fields
=
copy
.
deepcopy
(
self
.
base_fields
)
for
key
,
field
in
base_fields
.
items
():
ret
[
key
]
=
field
# Set up the field
field
.
initialize
(
parent
=
self
,
field_name
=
key
)
# Add in the default fields
for
key
,
val
in
self
.
default_fields
.
items
():
default_fields
=
self
.
get_default_fields
()
for
key
,
val
in
default_fields
.
items
():
if
key
not
in
ret
:
ret
[
key
]
=
val
...
...
@@ -182,8 +183,7 @@ class BaseSerializer(Field):
ret
=
self
.
_dict_class
()
ret
.
fields
=
{}
fields
=
self
.
get_fields
()
for
field_name
,
field
in
fields
.
items
():
for
field_name
,
field
in
self
.
fields
.
items
():
key
=
self
.
get_field_key
(
field_name
)
value
=
field
.
field_to_native
(
obj
,
field_name
)
ret
[
key
]
=
value
...
...
@@ -195,9 +195,8 @@ class BaseSerializer(Field):
Core of deserialization, together with `restore_object`.
Converts a dictionary of data into a dictionary of deserialized fields.
"""
fields
=
self
.
get_fields
()
reverted_data
=
{}
for
field_name
,
field
in
fields
.
items
():
for
field_name
,
field
in
self
.
fields
.
items
():
try
:
field
.
field_from_native
(
data
,
files
,
field_name
,
reverted_data
)
except
ValidationError
as
err
:
...
...
@@ -209,10 +208,7 @@ class BaseSerializer(Field):
"""
Run `validate_<fieldname>()` and `validate()` methods on the serializer
"""
# TODO: refactor this so we're not determining the fields again
fields
=
self
.
get_fields
()
for
field_name
,
field
in
fields
.
items
():
for
field_name
,
field
in
self
.
fields
.
items
():
try
:
validate_method
=
getattr
(
self
,
'validate_
%
s'
%
field_name
,
None
)
if
validate_method
:
...
...
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