fix(time-entries): preserve deleted tags in timesheet edits

This commit is contained in:
2026-04-27 22:58:27 +03:30
parent 7bd60fd641
commit 02c9c17c30
5 changed files with 331 additions and 86 deletions

View File

@@ -138,9 +138,9 @@ class TimeEntryViewSet(ModelViewSet):
return TimeEntryStopSerializer
return TimeEntrySerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
entry = create_time_entry(
user=request.user,
@@ -148,8 +148,8 @@ class TimeEntryViewSet(ModelViewSet):
**serializer.validated_data
)
output_serializer = TimeEntrySerializer(entry)
return Response(output_serializer.data, status=status.HTTP_201_CREATED)
output_serializer = TimeEntrySerializer(entry, context=self.get_serializer_context())
return Response(output_serializer.data, status=status.HTTP_201_CREATED)
def update(self, request, *args, **kwargs):
partial = kwargs.pop("partial", False)
@@ -160,16 +160,16 @@ class TimeEntryViewSet(ModelViewSet):
status=status.HTTP_403_FORBIDDEN,
)
serializer = self.get_serializer(data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
serializer = self.get_serializer(entry, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
updated_entry = update_time_entry(
entry=entry,
**serializer.validated_data
)
output_serializer = TimeEntrySerializer(updated_entry)
return Response(output_serializer.data, status=status.HTTP_200_OK)
output_serializer = TimeEntrySerializer(updated_entry, context=self.get_serializer_context())
return Response(output_serializer.data, status=status.HTTP_200_OK)
@action(detail=True, methods=["post"])
def stop(self, request, pk=None):
@@ -189,8 +189,8 @@ class TimeEntryViewSet(ModelViewSet):
end_time = serializer.validated_data.get("end_time")
stopped_entry = stop_time_entry(entry, end_time=end_time)
output_serializer = TimeEntrySerializer(stopped_entry)
return Response(output_serializer.data, status=status.HTTP_200_OK)
output_serializer = TimeEntrySerializer(stopped_entry, context=self.get_serializer_context())
return Response(output_serializer.data, status=status.HTTP_200_OK)
def destroy(self, request, *args, **kwargs):
"""