aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/mixins.py
diff options
context:
space:
mode:
authorKrzysztof Jurewicz2013-11-19 15:49:31 +0100
committerKrzysztof Jurewicz2013-11-19 15:49:31 +0100
commit9cea6880f7103c4e9407f975753c830f109c8c7c (patch)
tree1a45f020f5fa471842eff57131ae3ab3ef9b0fd0 /rest_framework/mixins.py
parentca2bd616d989f78d00641231e645198a6c95caa0 (diff)
downloaddjango-rest-framework-9cea6880f7103c4e9407f975753c830f109c8c7c.tar.bz2
Added handling of validation errors in PUT-as-create.
Fixes #1035.
Diffstat (limited to 'rest_framework/mixins.py')
-rw-r--r--rest_framework/mixins.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py
index 4606c78b..79f79c30 100644
--- a/rest_framework/mixins.py
+++ b/rest_framework/mixins.py
@@ -6,6 +6,7 @@ which allows mixin classes to be composed in interesting ways.
"""
from __future__ import unicode_literals
+from django.core.exceptions import ValidationError
from django.http import Http404
from rest_framework import status
from rest_framework.response import Response
@@ -127,7 +128,12 @@ class UpdateModelMixin(object):
files=request.FILES, partial=partial)
if serializer.is_valid():
- self.pre_save(serializer.object)
+ try:
+ self.pre_save(serializer.object)
+ except ValidationError as err:
+ # full_clean on model instance may be called in pre_save, so we
+ # have to handle eventual errors.
+ return Response(err.message_dict, status=status.HTTP_400_BAD_REQUEST)
self.object = serializer.save(**save_kwargs)
self.post_save(self.object, created=created)
return Response(serializer.data, status=success_status_code)