|
1 | 1 | from api.user.serializers import UserSerializer |
2 | | -from rest_framework import viewsets |
| 2 | +from api.user.models import User |
| 3 | +from rest_framework import viewsets, status |
3 | 4 | from rest_framework.permissions import IsAuthenticated |
4 | | -from rest_framework.decorators import action |
5 | 5 | from rest_framework.response import Response |
| 6 | +from rest_framework.exceptions import ValidationError |
6 | 7 | from rest_framework import mixins |
7 | 8 |
|
8 | 9 |
|
9 | | -class UserViewSet(viewsets.GenericViewSet, mixins.CreateModelMixin): |
| 10 | +class UserViewSet(viewsets.GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModelMixin): |
10 | 11 | serializer_class = UserSerializer |
11 | | - permission_classes = (IsAuthenticated, ) |
| 12 | + permission_classes = (IsAuthenticated,) |
| 13 | + |
| 14 | + def update(self, request, *args, **kwargs): |
| 15 | + partial = kwargs.pop('partial', True) |
| 16 | + instance = User.objects.get(id=request.data.get('userID')) |
| 17 | + serializer = self.get_serializer(instance, data=request.data, partial=partial) |
| 18 | + serializer.is_valid(raise_exception=True) |
| 19 | + self.perform_update(serializer) |
| 20 | + |
| 21 | + if getattr(instance, '_prefetched_objects_cache', None): |
| 22 | + instance._prefetched_objects_cache = {} |
| 23 | + |
| 24 | + return Response(serializer.data) |
12 | 25 |
|
13 | 26 | def create(self, request, *args, **kwargs): |
14 | | - pass |
| 27 | + user_id = request.data.get('userID') |
| 28 | + |
| 29 | + if not user_id: |
| 30 | + raise ValidationError({"user": "Precise an ID."}) |
| 31 | + |
| 32 | + if self.request.user.pk != user_id and not self.request.user.is_superuser: |
| 33 | + |
| 34 | + raise ValidationError({ |
| 35 | + "success": False, |
| 36 | + "msg": "Error updating user" |
| 37 | + }) |
| 38 | + self.update(request) |
15 | 39 |
|
| 40 | + return Response({ |
| 41 | + "success": True |
| 42 | + }, status.HTTP_200_OK) |
0 commit comments