From 7c96da524b819834e69759e48cc3ad1ce313e4dc Mon Sep 17 00:00:00 2001 From: Chneemann Date: Fri, 11 Apr 2025 12:08:48 +0200 Subject: [PATCH] fix: task creation by automatically setting the creator field to the authenticated user --- task_app/serializers.py | 6 +++++- task_app/views.py | 23 ++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/task_app/serializers.py b/task_app/serializers.py index b4cccb6..6264c5e 100644 --- a/task_app/serializers.py +++ b/task_app/serializers.py @@ -26,4 +26,8 @@ class TaskSerializer(serializers.ModelSerializer): read_only_fields = ['id', 'creator', 'created_at'] renderer_classes = [CamelCaseJSONRenderer] - parser_classes = [CamelCaseJSONParser] \ No newline at end of file + parser_classes = [CamelCaseJSONParser] + + def create(self, validated_data): + validated_data['creator'] = self.context['request'].user + return super().create(validated_data) \ No newline at end of file diff --git a/task_app/views.py b/task_app/views.py index cde23e4..0716430 100644 --- a/task_app/views.py +++ b/task_app/views.py @@ -17,31 +17,40 @@ class TaskViewSet(viewsets.ModelViewSet): def retrieve(self, request, pk=None): task = get_cached_task_by_id(pk) + serializer = self.get_serializer(task) + if not task: return Response({'error': 'Task not found.'}, status=status.HTTP_404_NOT_FOUND) - serializer = self.get_serializer(task) + return Response(serializer.data) def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) + if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - task = serializer.save() - assign_users_to_task(request.data.get('assignees', []), task) + + try: + task = serializer.save() + except Exception as e: + return Response({"error": f"Task creation failed: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + assignees_data = request.data.get('assignees', []) + if assignees_data: + assign_users_to_task(assignees_data, task) subtasks_data = request.data.get("subtasks", []) - if subtasks_data: create_subtasks(subtasks_data, task) cache.delete(f"task_{task.id}") - + return Response(serializer.data, status=status.HTTP_201_CREATED) - + def update(self, request, *args, **kwargs): task = self.get_object() serializer = self.get_serializer(task, data=request.data, partial=True) + if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)