1- from django . shortcuts import render
1+ from functools import partial
22from rest_framework import viewsets
33from rest_framework .decorators import action
44from rest_framework .response import Response
@@ -11,16 +11,61 @@ class TaskViewSet(viewsets.ModelViewSet):
1111 queryset = Task .objects .all ()
1212 serializer_class = TaskSerializer
1313
14+ @action (detail = True , methods = ['get' , 'put' ])
15+ def status (self , request , pk ):
16+ try :
17+ task = Task .objects .filter (id = pk ).get ()
18+ except Task .DoesNotExist :
19+ return Response ("{ id does not exist }" , status = status .HTTP_404_NOT_FOUND )
20+
21+ if request .method == 'GET' :
22+ return Response (f"{{ '{ task .status } ' }}" )
23+ else :
24+ serializer = TaskSerializer (task , data = request .data , partial = True )
25+ if serializer .is_valid ():
26+ return Response (status = status .HTTP_204_NO_CONTENT )
27+ else :
28+ return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
29+
30+ @action (detail = True , methods = ['get' , 'put' ])
31+ def owner (self , request , pk ):
32+ try :
33+ task = Task .objects .filter (id = pk ).get ()
34+ except Task .DoesNotExist :
35+ return Response ("{ id does not exist }" , status = status .HTTP_404_NOT_FOUND )
36+
37+ if request .method == 'GET' :
38+ return Response (f"{{ '{ task .ownerId } ' }}" )
39+ else :
40+ serializer = TaskSerializer (task , data = request .data , partial = True )
41+ if serializer .is_valid ():
42+ return Response (status = status .HTTP_204_NO_CONTENT )
43+ else :
44+ return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
45+
46+ def create (self , request ):
47+ serializer = TaskSerializer (data = request .data )
48+ if serializer .is_valid ():
49+ task = serializer .save ()
50+ return Response (headers = {'Location' :f'tasks/{ task .id } ' , 'x-Created-Id' :task .id }, status = status .HTTP_201_CREATED )
51+ else :
52+ return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
53+
54+
1455class PersonViewSet (viewsets .ModelViewSet ):
1556 queryset = Person .objects .all ()
1657 serializer_class = PersonSerializer
1758
1859 @action (detail = True , methods = ['get' , 'post' ])
1960 def tasks (self , request , pk ):
61+ try :
62+ Person .objects .filter (id = pk ).get ()
63+ except Person .DoesNotExist :
64+ return Response ("{ id does not exist }" , status = status .HTTP_404_NOT_FOUND )
2065 if request .method == 'GET' :
2166 person_tasks = Task .objects .filter (ownerId = pk )
2267 if person_tasks .count () < 1 :
23- return Response (data = "{'Tasks not found '}" , status = status .HTTP_404_NOT_FOUND )
68+ return Response (data = "{'Tasks do not exist '}" , status = status .HTTP_404_NOT_FOUND )
2469 serializer = TaskSerializer (person_tasks , many = True )
2570 return Response (serializer .data )
2671 else :
@@ -29,14 +74,14 @@ def tasks(self, request, pk):
2974 serializer = TaskSerializer (data = data )
3075 if serializer .is_valid ():
3176 task = serializer .save ()
32- return Response (headers = {'Location' :'Raz ' , 'x-Created-Id' :task .id }, status = status .HTTP_201_CREATED )
77+ return Response (headers = {'Location' :f'tasks/ { task . id } ' , 'x-Created-Id' :task .id }, status = status .HTTP_201_CREATED )
3378 else :
3479 return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
3580
3681 def create (self , request ):
3782 serializer = PersonSerializer (data = request .data )
3883 if serializer .is_valid ():
3984 person = serializer .save ()
40- return Response (headers = {'Location' :'Raz ' , 'x-Created-Id' :person .id }, status = status .HTTP_201_CREATED )
85+ return Response (headers = {'Location' :f'people/ { person . id } ' , 'x-Created-Id' :person .id }, status = status .HTTP_201_CREATED )
4186 else :
4287 return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
0 commit comments