66from rest_framework .views import APIView
77from rest_framework .viewsets import ModelViewSet
88from rest_framework import status
9+ from rest_framework .decorators import action
910#from rest_framework.permissions import IsAuthenticated
1011
1112from .models import Task , Topic , Time
12- from .serializers import TaskReadSerializer , TaskWriteSerializer , TopicReadSerializer , TimeReadSerializer
13+ from .serializers import TaskReadSerializer , TaskWriteSerializer , TopicReadSerializer , TimeReadSerializer , TaskCompleteSerializer
1314
1415
1516# Create your views here.
@@ -61,7 +62,6 @@ def create(self, request, *args, **kwargs):
6162 write_serializer = TaskWriteSerializer (data = request .data )
6263 write_serializer .is_valid (raise_exception = True )
6364
64- # 👇 THIS is what perform_create used to do
6565 user_id = request .data .get ("user_id" )
6666 if user_id :
6767 task = write_serializer .save (user_id = user_id )
@@ -70,6 +70,14 @@ def create(self, request, *args, **kwargs):
7070 else :
7171 raise ValidationError ({"user_id" : "Provide user_id or authenticate." })
7272
73- # Return READ shape
7473 read_serializer = TaskReadSerializer (task )
75- return Response (read_serializer .data , status = status .HTTP_201_CREATED )
74+ return Response (read_serializer .data , status = status .HTTP_201_CREATED )
75+
76+ @action (detail = True , methods = ['patch' ])
77+ def toggle_complete (self , request , pk = None ):
78+ task = self .get_object ()
79+ serializer = TaskCompleteSerializer (task , data = request .data , partial = True )
80+ serializer .is_valid (raise_exception = True )
81+ serializer .save ()
82+ read_serializer = TaskReadSerializer (task )
83+ return Response (read_serializer .data )
0 commit comments