aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2014-02-18 12:29:50 +0000
committerTom Christie2014-02-18 12:29:50 +0000
commit68573a3c1a35a2c278a5e94e581b23510b6a8cde (patch)
tree568c06d0f28b52665a015c1340bd6961d242f5cd /rest_framework
parent822eb39599b248c68573c3095639a831ab6df99a (diff)
parentdca8b983568e1ca7534ad7244e6eb57e1b87cc68 (diff)
downloaddjango-rest-framework-68573a3c1a35a2c278a5e94e581b23510b6a8cde.tar.bz2
Merge pull request #1427 from Ian-Foote/refactor_update
Refactor UpdateModelMixin.update
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/mixins.py37
1 files changed, 17 insertions, 20 deletions
diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py
index 5fbcf700..7722d5be 100644
--- a/rest_framework/mixins.py
+++ b/rest_framework/mixins.py
@@ -116,30 +116,27 @@ class UpdateModelMixin(object):
partial = kwargs.pop('partial', False)
self.object = self.get_object_or_none()
- if self.object is None:
- created = True
- save_kwargs = {'force_insert': True}
- success_status_code = status.HTTP_201_CREATED
- else:
- created = False
- save_kwargs = {'force_update': True}
- success_status_code = status.HTTP_200_OK
-
serializer = self.get_serializer(self.object, data=request.DATA,
files=request.FILES, partial=partial)
- if serializer.is_valid():
- 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)
+ if not serializer.is_valid():
+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
- return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+ 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)
+
+ if self.object is None:
+ self.object = serializer.save(force_insert=True)
+ self.post_save(self.object, created=True)
+ return Response(serializer.data, status=status.HTTP_201_CREATED)
+
+ self.object = serializer.save(force_update=True)
+ self.post_save(self.object, created=False)
+ return Response(serializer.data, status=status.HTTP_200_OK)
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True