From 07346bf03dba7bda4da1a83b7a95f5cd3d8bab5e Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Mon, 23 Jun 2025 18:36:52 -0400 Subject: [PATCH] fix(models): ensure associated AdventureImages are deleted and files cleaned up on Adventure deletion --- backend/server/adventures/models.py | 12 ++++++++++++ .../server/adventures/views/adventure_image_view.py | 4 ---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/server/adventures/models.py b/backend/server/adventures/models.py index 40bb680..b79fa6d 100644 --- a/backend/server/adventures/models.py +++ b/backend/server/adventures/models.py @@ -656,6 +656,12 @@ class Adventure(models.Model): return result + def delete(self, *args, **kwargs): + # Delete all associated AdventureImages first to trigger their filesystem cleanup + for image in self.images.all(): + image.delete() + super().delete(*args, **kwargs) + def __str__(self): return self.name @@ -838,6 +844,12 @@ class AdventureImage(models.Model): self.full_clean() # This calls clean() method super().save(*args, **kwargs) + def delete(self, *args, **kwargs): + # Remove file from disk when deleting AdventureImage + if self.image and os.path.isfile(self.image.path): + os.remove(self.image.path) + super().delete(*args, **kwargs) + def __str__(self): return self.image.url if self.image else f"Immich ID: {self.immich_id or 'No image'}" diff --git a/backend/server/adventures/views/adventure_image_view.py b/backend/server/adventures/views/adventure_image_view.py index db62ce8..537aab2 100644 --- a/backend/server/adventures/views/adventure_image_view.py +++ b/backend/server/adventures/views/adventure_image_view.py @@ -156,10 +156,6 @@ class AdventureImageViewSet(viewsets.ModelViewSet): return super().update(request, *args, **kwargs) def perform_destroy(self, instance): - print("perform_destroy") - if instance.image: - if os.path.isfile(instance.image.path): - os.remove(instance.image.path) return super().perform_destroy(instance) def destroy(self, request, *args, **kwargs):