diff options
| author | Xavier Ordoquy | 2014-03-03 11:41:07 +0100 |
|---|---|---|
| committer | Xavier Ordoquy | 2014-03-03 11:41:07 +0100 |
| commit | 3d7cb72e0a770595d8934b731f9c462b839f941a (patch) | |
| tree | 809035a13a8de89d020ffefea38f779bfa4a7ed3 /rest_framework/mixins.py | |
| parent | b2f0f4fcf49d457aefc21960f62fcb8f2cf6770d (diff) | |
| parent | ee9864e0dce10018261c131a76eb7c668703d76c (diff) | |
| download | django-rest-framework-3d7cb72e0a770595d8934b731f9c462b839f941a.tar.bz2 | |
Merge remote-tracking branch 'reference/master' into feature/django_1_7
Diffstat (limited to 'rest_framework/mixins.py')
| -rw-r--r-- | rest_framework/mixins.py | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 5fbcf700..e1a24dc7 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 |
