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
f104f743
Commit
f104f743
authored
Nov 27, 2012
by
Marko Tibold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved model validation from .perform_validation() to .validate()
parent
e7666014
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
17 deletions
+17
-17
rest_framework/serializers.py
+17
-17
No files found.
rest_framework/serializers.py
View file @
f104f743
...
@@ -221,10 +221,17 @@ class BaseSerializer(Field):
...
@@ -221,10 +221,17 @@ class BaseSerializer(Field):
except
ValidationError
as
err
:
except
ValidationError
as
err
:
self
.
_errors
[
field_name
]
=
self
.
_errors
.
get
(
field_name
,
[])
+
list
(
err
.
messages
)
self
.
_errors
[
field_name
]
=
self
.
_errors
.
get
(
field_name
,
[])
+
list
(
err
.
messages
)
try
:
# We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
attrs
=
self
.
validate
(
attrs
)
# which in turn can cause inconsistent validation errors.
except
ValidationError
as
err
:
if
not
self
.
_errors
:
self
.
_errors
[
'non_field_errors'
]
=
err
.
messages
try
:
attrs
=
self
.
validate
(
attrs
)
except
ValidationError
as
err
:
if
hasattr
(
err
,
'message_dict'
):
for
field_name
,
error_messages
in
err
.
message_dict
.
items
():
self
.
_errors
[
field_name
]
=
self
.
_errors
.
get
(
field_name
,
[])
+
list
(
error_messages
)
elif
hasattr
(
err
,
'messages'
):
self
.
_errors
[
'non_field_errors'
]
=
err
.
messages
return
attrs
return
attrs
...
@@ -451,22 +458,15 @@ class ModelSerializer(Serializer):
...
@@ -451,22 +458,15 @@ class ModelSerializer(Serializer):
except
KeyError
:
except
KeyError
:
return
ModelField
(
model_field
=
model_field
,
**
kwargs
)
return
ModelField
(
model_field
=
model_field
,
**
kwargs
)
def
from_native
(
self
,
data
,
files
):
def
validate
(
self
,
attrs
):
restored_object
=
super
(
ModelSerializer
,
self
)
.
from_native
(
data
,
files
)
copied_attrs
=
copy
.
deepcopy
(
attrs
)
restored_object
=
self
.
restore_object
(
copied_attrs
,
instance
=
getattr
(
self
,
'object'
,
None
))
if
restored_object
is
None
:
return
self
.
perform_model_validation
(
restored_object
)
self
.
perform_model_validation
(
restored_object
)
return
restored_object
return
attrs
def
perform_model_validation
(
self
,
restored_object
):
def
perform_model_validation
(
self
,
restored_object
):
try
:
# Call Django's full_clean() which in turn calls: Model.clean_fields(), Model.clean(), Model.validat_unique()
# Call Django's full_clean() which in turn calls: Model.clean_fields(), Model.clean(), Model.validat_unique()
restored_object
.
full_clean
(
exclude
=
list
(
self
.
opts
.
exclude
))
restored_object
.
full_clean
(
exclude
=
list
(
self
.
opts
.
exclude
))
except
ValidationError
as
e
:
for
field_name
,
error_messages
in
e
.
message_dict
.
items
():
self
.
_errors
[
field_name
]
=
self
.
_errors
.
get
(
field_name
,
[])
+
list
(
error_messages
)
def
restore_object
(
self
,
attrs
,
instance
=
None
):
def
restore_object
(
self
,
attrs
,
instance
=
None
):
"""
"""
...
...
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